2012-09-03 96 views
5

我想运行一个简单的查询,这让我基于时间戳数据,如下所示:DB2时间戳select语句

SELECT * 
FROM <table_name> 
WHERE id = 1 
AND usagetime = timestamp('2012-09-03 08:03:06') 
WITH UR; 

这似乎并没有记录返回给我,而这个纪录出现在id = 1的数据库。

我在这里做错了什么?

列使用时间的数据类型正确,设置为时间戳。

+2

时间戳有几分之一秒,以及。我猜这是你的问题,我没有看到你的选择语句中的那些。 – bhamby

回答

17

@bhamby是正确的。通过离开时间戳记值的微秒数,您的查询只会在2012-09-03 08:03:06.000000

的使用时间上匹配如果您没有从先前查询中捕获的完整时间戳记值,那么您可以指定一个范围谓词,将匹配于任何微秒值对于时间:

...WHERE id = 1 AND usagetime BETWEEN '2012-09-03 08:03:06' AND '2012-09-03 08:03:07' 

...WHERE id = 1 AND usagetime >= '2012-09-03 08:03:06' 
    AND usagetime < '2012-09-03 08:03:07' 
+1

我还想指出,在指定时间戳值的可接受字符串表示形式(在您的问题中正确执行)时,不需要调用TIMESTAMP()。 –

+1

请不要使用'BETWEEN',特别是在处理日期/时间/时间戳时。首先,你的两个'WHERE'子句是**不等于**。 –

+1

你是对的。 “BETWEEN”条件将包括以下第二条,但这两个比较将排除第二条。 使用'BETWEEN'的另一个缺点是 - 至少在旧版本的DB2中 - 查询优化器选择效率较低的访问计划要比它对两个显式的范围比较要求更高。 –