Database db2查询时间戳数据类型的奇怪行为
我想在db2中查询时间戳数据类型。 我把这个问题写在下面Database db2查询时间戳数据类型的奇怪行为,database,db2,Database,Db2,我想在db2中查询时间戳数据类型。 我把这个问题写在下面 从LASTMODIFIEDDATE=timestamp('2012-04-03 07:59:50')的示例中选择* 对于上面的查询,我没有得到任何结果,然后我尝试了 从LASTMODIFIEDDATE>timestamp('2012-04-03 07:59:50')的示例中选择* 在上面的查询中,我得到的结果与时间戳“2012-04-03 07:59:50”以及时间戳的更大值相匹配,例如“2012-04-03 08:59:50” 如果我得
从LASTMODIFIEDDATE=timestamp('2012-04-03 07:59:50')的示例中选择*
对于上面的查询,我没有得到任何结果,然后我尝试了
从LASTMODIFIEDDATE>timestamp('2012-04-03 07:59:50')的示例中选择*
在上面的查询中,我得到的结果与时间戳“2012-04-03 07:59:50”以及时间戳的更大值相匹配,例如“2012-04-03 08:59:50”
如果我得到了'>'运算符的结果,那么为什么我没有得到'='运算符的任何结果呢?
有什么原因吗?或者我写错了问题
谢谢 否,DB2存储时间戳的完整值,包括小数秒。您可能希望将系统显示时间戳的格式更改为包含毫秒的格式 请尝试使用此选项:
SELECT *
FROM Sample
WHERE lastModifiedDate >= TIMESTAMP('2012-04-03 07:59:50')
AND lastModifiedDate < TIMESTAMP('2012-04-03 07:59:50)' + 1 SECONDS
选择*
从样品
其中lastModifiedDate>=时间戳('2012-04-03 07:59:50')
和lastModifiedDate<时间戳('2012-04-03 07:59:50)'+1秒
除非您拥有时间戳的完整值,包括毫秒,否则您将获得一个范围-访问数据范围时,请使用“下限包含,上限独占”。您还可以将db列的值单独截断为秒,然后使用字符串执行比较:
Select * from sample where TRUNC(LASTMODIFIEDDATE, 'SS') = '2012-04-03 07:59:50'
在DB210.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'
时间戳包括小数秒,您的列中有吗?不,没有小数秒。@Ben::显然时间戳列显示值“2012-04-03 07:59:50”,db2是否截断小数然后存储在数据库中?谢谢@X-Zero我在尝试您的查询后得到结果::还有一个问题,24小时时钟的上限是多少,是23.59.59吗?
23:59:59.9999999
,是的(时间上没有毫秒,但这就是为什么你会使用上限)。需要注意的是,这只是DB2上这种类型的上限——其他RDBMS具有相似/相同的类型,记录到不同的分辨率,因此您不能依赖“精确”值。所以,始终使用我指定的范围,您将永远(据我所知)是好的。