oracle日期范围

Hoa*_*oax 11 sql oracle plsql date oracle10g

使用Oracle 10g db我有一个像这样的表:

 create table x(
 ID NUMBER(10) primary key,
 wedding DATE NOT NULL
 );
Run Code Online (Sandbox Code Playgroud)

我怎么能够

 select * from x where wedding is in june 2008???
Run Code Online (Sandbox Code Playgroud)

我知道这可能很容易,但到目前为止我找不到任何令人满意的答案.非常感谢帮助.

OMG*_*ies 21

使用:

SELECT *
  FROM x
 WHERE x.wedding BETWEEN TO_DATE('2008-JUN-01', 'YYYY-MON-DD') 
                            AND TO_DATE('2008-JUL-01', 'YYYY-MON-DD')
Run Code Online (Sandbox Code Playgroud)

使用TO_DATE构造日期的时间部分为00:00:00,这要求结束日期提前一天,除非您想使用逻辑将当前日期更正为午夜之前的一秒.未经测试:

TO_DATE('2008-JUN-30', 'YYYY-MON-DD') + 1 - (1/(24*60*60))
Run Code Online (Sandbox Code Playgroud)

这应该会增加一天到2008年6月30日,然后减去一秒钟,以便返回最终日期30-Jun-2008 23:59.

参考文献:

  • ORACLE中的DATE类型包含日期和时间组件.表达TO_DATE('2008-JUN-30','YYYY-MON-DD')等于'2008-JUN-30 00:00:00'.如果数据包含时间信息,那么您可能会遇到此表达式的问题.在'2008-JUN-30 16:00:00'(下午4点)发生的婚礼将不在上述查询的结果集中. (2认同)