比较DB2日期

时间:2012-05-28 16:48:08

标签: db2

我在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'

我如何比较日期?

4 个答案:

答案 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'