8

我正在尝试运行一个简单的查询,该查询根据时间戳获取数据,如下所示:

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

这似乎没有向我返回记录,而该记录存在于 id = 1 的数据库中。

我在这里做错了什么?

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

4

2 回答 2

23

@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'
于 2012-09-03T23:17:47.360 回答
2

在与字符串格式进行比较时,您可能希望在列上使用 TRUNC 函数,因此它只比较到秒,而不是毫秒。

SELECT * FROM <table_name> WHERE id = 1 
AND TRUNC(usagetime, 'SS') = '2012-09-03 08:03:06';

如果您想截断到分钟、小时等,这也是可能的,只需使用适当的符号而不是“SS”:

hour ('HH'), minute('MI'), year('YEAR' or 'YYYY'), month('MONTH' or 'MM'), Day ('DD')
于 2018-06-19T21:02:34.323 回答