在SQL中更正日期范围

时间:2011-07-29 13:23:58

标签: datetime plsql

这让我有点偏执,但我正在检索一系列记录,这些记录属于一段时间,比如从2011年1月1日(从午夜开始)到2011年3月31日(所有记录直到晚上11:59:59)

我正在使用条件

t.logtime between to_date('2011-01-01', 'yyyy-mm-dd') and to_date('2011-03-31')

请注意,logtime是一个日期时间字段。

这是否反映了我的想法?或者我实际上错过了一小时24小时? 我也可以指定时间,但我希望没有它我就可以完成。

1 个答案:

答案 0 :(得分:3)

是的,你几乎失去了所有的最后一天。有各种解决方案;可能最简单的是:

t.logtime >= to_date('2011-01-01', 'yyyy-mm-dd')
and t.logtime < to_date('2011-04-01', 'yyyy-mm-dd')

我也使用ANSI日期文字语法:

t.logtime >= date '2011-01-01'
and t.logtime < date '2011-04-01'

另一种方式是:

trunc(t.logtime) between date '2011-01-01' and date '2011-03-31'

但请注意,它不能再使用logtime上的索引(尽管它可以在trunc(logtime)上使用索引)。