使用BETWEEN或< =,> =表示Oracle时间戳

时间:2010-11-23 16:45:55

标签: sql oracle oracle10g

我的Oracle表格中包含tmstp数据类型的TIMESTAMP(3) WITH TIME ZONE列。

当我运行以下查询时

SELECT COUNT(column1) 
  FROM table1 
 WHERE tmstp BETWEEN to_timestamp_tz('10-OCT-10 05.00.00.000000000 AM -05:00', 'DD-MON-RR HH.MI.SSXFF AM TZR')
                 AND to_timestamp_tz('11-OCT-10 04.59.59.999999999 AM -05:00', 'DD-MON-RR HH.MI.SSXFF AM TZR');

它提供的计数大约是以下查询的两倍:

SELECT COUNT(column1) 
  FROM table1 
 WHERE tmstp >= to_timestamp_tz('10-OCT-10 05.00.00.000000000 AM -05:00', 'DD-MON-RR HH.MI.SSXFF AM TZR') 
   AND tmstp <= to_timestamp_tz('11-OCT-10 04.59.59.999999999 AM  -05:00', 'DD-MON-RR HH.MI.SSXFF AM TZR');

我认为他们应该给出相同的结果。关于可能发生什么的任何意见?我该怎么调试呢?

1 个答案:

答案 0 :(得分:6)

对不起,不好意思。我想到了。我的问题实际上也存在缺陷,因为我编辑它来隐藏机密数据。

其中一个查询中AM和时区偏移之间有一个额外的空格,导致不同的结果。

愚蠢的我。

因此,如果转换的时间戳字符串与空格有点关闭,则答案可能会关闭。