查询不返回结果 - 在日期字段上过滤

时间:2014-02-04 17:25:46

标签: sql oracle

我有以下查询尝试在一对日期之间从MYTABLE返回所有记录。

存储在数据库中的示例日期为:2013-04-10 15:42:10.096789

以下查询执行约30分钟但似乎没有返回,MYTABLE的大小为200'000行。

我的查询是否正确?

SELECT * FROM MYTABLE 
WHERE TIMESTAMP >= TO_DATE('2013-04-01 00:00:00' , 'YYYY-MM-DD HH24:MI:SS') 
AND TIMESTAMP <= TO_DATE('2013-04-30 00:00:00' , 'YYYY-MM-DD HH24:MI:SS')
ORDER BY REP_TIMESTAMP DESC

存储日期(小数点后6位)的详细程度是否可以成为此查询的问题?

2 个答案:

答案 0 :(得分:1)

2013-05-10 15:42:10.096789超出了您所查询的日期范围。您的查询仅返回2014年4月的结果,但2013-05-10 15:42:10.096789将于2013年5月返回。

顺便说一句,如果您使用的是Oracle,则可以使用between子句。这使它更容易阅读。我不确定其他数据库软件是否支持该语法。

SELECT * FROM MYTABLE 
WHERE TIMESTAMP BETWEEN TIMESTAMP '2013-04-01 00:00:00'
  AND TIMESTAMP '2013-04-30 00:00:00'
ORDER BY REP_TIMESTAMP DESC

此外,我的帖子已经过编辑,以反映出由于您使用的是ISO标准格式,因此您可以使用时间戳文字而不是使用TO_DATE函数。

答案 1 :(得分:0)

您搜索的日期不在您正在搜索的范围内。请点按>=<=或选择其他日期。