比较DB2日期

at0kjp5o  于 2023-03-12  发布在  DB2
关注(0)|答案(5)|浏览(173)

我在DB2表中有一个DB2 DATE类型字段。我想通过日期筛选器选择数据。例如:

SELECT *
FROM   table
WHERE registrationdate > '2002-10-01';

从上面的查询中,我得到了registrationdate从'1943-10- 01'开始的记录,但这是不正确的。
这些也不起作用:

registrationdate > date('2002-10-01')
date(registrationdate) > date('2002-10-01')
date(registrationdate) > '2002-10-01'

我需要如何比较日期?

2o7dmzc5

2o7dmzc51#

DATE文字的SQL标准格式为:

DATE '2002-10-01'

至少,它值得一试:

SELECT *
  FROM table
 WHERE registrationdate > DATE '2002-10-01';
zmeyuzjn

zmeyuzjn2#

我探索了数据库的一些其他问题,重新启动后它开始工作,所以现在工作正常:

registrationdate > '2002-10-01'
7cjasjjr

7cjasjjr3#

用于日期的默认格式由DB2数据库的地区代码(可在创建数据库时指定)确定。例如,我的数据库是使用territory=US创建的。因此,日期格式如下所示:

values current date 
1 
---------- 
05/30/2003 

1 record(s) selected.

您可以从DB CFG获得区域代码。

db2 get db cfg | egrep 'code|territory'
 Database territory                                      = US
 Database code page                                      = 1208
 Database code set                                       = UTF-8
 Database country/region code                            = 1

也就是说,格式是MM/DD/YYYY,如果您想更改格式,可以绑定db2实用程序包集合以使用不同的日期格式。
要使用SQL获取当前的日期、时间和时间戳,(基本上可以让您了解日期格式是什么)请参考适当的DB2寄存器:sysibm.sysdummy1**表是一个特殊的内存表,可用于发现DB2寄存器的值

db2 "SELECT current date FROM sysibm.sysdummy1 "

1
----------
06/02/2014

  1 record(s) selected.

即使我们省略函数中的引号,DATE函数仍然有效,但结果不正确:

db2 "SELECT date(2001-09-22) FROM sysibm.sysdummy1 "

1
----------
05/24/0006

  1 record(s) selected.

当DATE函数获取字符串作为输入时,它假定该字符串是DB2日期的有效字符表示,并相应地对其进行转换。相反,当输入为数字时,该函数假定该字符串表示从当前纪元开始算起的天数减1(即0001-01-01)。在上面的查询中,输入为2001-09-22,它等于(2001-9)-22,即1970天。
如果上述所有命令都适用,下面的命令应该可以很好地解决您的问题。

一月一日

beq87vna

beq87vna4#

使用此格式。

registrationdate > 'mm/dd/yyyy'
byqmnocz

byqmnocz5#

在DB2中,您也可以对DATE类型使用'LIKE'。
例如,如果您想要特定日期的所有数据。

select e.* from EMPLOYEES as e where b_date LIKE '1972-07-31';

这不会出错,并输出数据wrt日期。
或者十年的元组将如下所示:例如:20世纪70年代的记录

select e.* from EMPLOYEES as e where b_date LIKE '197%';

将回归70年代的纪录。
Using Like for a specific date in DB2
Finding year using LIKE

相关问题