我在DB2表中有一个DB2 DATE类型字段。 我想通过日期过滤器选择数据。例如:
SELECT *
FROM table
WHERE registrationdate > '2002-10-01';
从上面的查询中,我得到的注册日期为“1943-10-01”,但这是不正确的。
这些也不起作用:
registrationdate > date('2002-10-01')
date(registrationdate) > date('2002-10-01')
date(registrationdate) > '2002-10-01'
我如何比较日期?
答案 0 :(得分:14)
DATE文字的SQL标准格式为:
DATE '2002-10-01'
至少,值得尝试:
SELECT *
FROM table
WHERE registrationdate > DATE '2002-10-01';
答案 1 :(得分:3)
我探讨了数据库的一些其他问题,重新启动后它开始工作,所以现在可以正常工作:
registrationdate > '2002-10-01'
答案 2 :(得分:3)
日期使用的默认格式由 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天。
如果以上所有内容都适用,则以下命令应该可以解决您的问题。
<强>
SELECT * FROM table WHERE registrationdate > '10/01/2002';
强>
答案 3 :(得分:0)
使用此格式。
registrationdate > 'mm/dd/yyyy'