2013-10-11 60 views
0

我使用此查询:查询的SQL时间戳之间使用揪错数据

SELECT ts as "TimeStamp", 
     stat as "Status" 
    FROM myTable 
    WHERE stat = 'O' 
    AND source = 'Source1' 
    AND ts BETWEEN TO_TIMESTAMP('2013-10-05','yyyy-mm-dd') AND 
        TO_TIMESTAMP('2013-10-06','yyyy-mm-dd') 

而且也尝试:

SELECT ts as "TimeStamp", 
     stat as "Status" 
    FROM myTable 
    WHERE stat = 'O' 
    AND source = 'Source1' 
    AND ts >= TO_TIMESTAMP('2013-10-05','yyyy-mm-dd') AND ts < 
        TO_TIMESTAMP('2013-10-06','yyyy-mm-dd') 

返回0的记录,但如果我不

SELECT ts as "TimeStamp", 
     stat as "Status" 
    FROM myTable 
    WHERE stat = 'O' 

我可以清楚地识别5条记录。显然,TO_TIMESTAMP不能正常工作,我希望有人也许能够帮助确定合适的修复

编辑:为了澄清,我只是想为10/5的期限不包括10/6 对不起粘贴错误的结果 此外,该字段的类型是TIMESTAMP(6)

回答

4

因为TO时间戳有时间,即使您没有指定。所以它只选择到拉特日一开始。根据需要指定时间23:59:59和亚秒,或者小于第二天。

... 
AND ts >= TO_TIMESTAMP('2013-10-05','yyyy-mm-dd') 
AND ts < TO_TIMESTAMP('2013-10-07','yyyy-mm-dd') 
+0

寻找,但我注意到在你编辑的文章中,你有第二个条款少于2013-10-06。如果那是尝试,那么它仍然是错误的。需要小于_下一天,所以请注意我的示例使用2013-10-07。 – asantaballa

+0

猜猜这是否奏效! – asantaballa

0

尝试: 整形与TO_DATE( '2013年10月5日', 'YYYY-MM-DD')和 TO_DATE( '2013年10月6日', 'YYYY-MM-DD' )

并介意它会从10-05 00:00:00到00:00:00的10-06结果如果您未指定HH MI SS掩码。

日期掩码是大小写敏感的,TO_DATE会更好。