db2查询时间戳数据类型的奇怪行为

时间:2012-06-24 17:45:00

标签: database db2

我想在db2中查询时间戳数据类型。 我在下面写了查询

Select * from sample where LASTMODIFIEDDATE = timestamp('2012-04-03 07:59:50')

我没有得到任何上述查询的结果,然后我尝试了

Select * from sample where LASTMODIFIEDDATE > timestamp('2012-04-03 07:59:50')

在上面的查询中,我得到的结果与时间戳'2012-04-03 07:59:50'相匹配,以获得更大的时间戳值,例如'2012-04-03 08:59:50'。

如果我收到'>'的结果运算符那么为什么我没有得到'='运算符的任何结果? 任何原因或我写错了查询?

谢谢!

2 个答案:

答案 0 :(得分:5)

不,DB2存储时间戳的完整值,包括小数秒。您可能希望将系统显示时间戳的格式更改为包含毫秒的内容。

请尝试使用此代码:

SELECT * 
FROM Sample
WHERE lastModifiedDate >= TIMESTAMP('2012-04-03 07:59:50')
AND lastModifiedDate < TIMESTAMP('2012-04-03 07:59:50)' + 1 SECONDS

除非您拥有时间戳的完整值,包括毫秒,否则您将获得一个范围 - 在访问一系列数据时,使用'lower -bound inclusive,upper-bound exclusive'。

答案 1 :(得分:0)

您还可以将db列的值截断为仅秒,然后与您的字符串进行比较:

Select * from sample where TRUNC(LASTMODIFIEDDATE, 'SS') = '2012-04-03 07:59:50'

在DB2 10.5中工作。您也可以通过以下方式截断:

hour ('HH'), minute('MI'), year('YEAR' or 'YYYY'), month('MONTH' or 'MM'), Day ('DD')

示例:

Select * from sample where TRUNC(LASTMODIFIEDDATE, 'HH') = '2012-04-03 07:00:00'
Select * from sample where TRUNC(LASTMODIFIEDDATE, 'MI') = '2012-04-03 07:59:00'