PL/SQL中的日期范围(Oracle)

Sao*_*obi 7 oracle plsql

如果我有一个名为Date列的表myDate,其值为2009-08-25 09:00:09.0.

我想选择8月25日的所有行,从上午12:00:01晚上11:59:59,并且8月26日没有.仅仅使用条件就足够了:

where myDate between Date '2009-08-25' and Date '2009-08-26'
Run Code Online (Sandbox Code Playgroud)

我想在8月25日之前选择所有行,不包括8月25日.我可以这样做:

where myDate < Date '2009-08-25'
Run Code Online (Sandbox Code Playgroud)

Vin*_*rat 13

如果你想要全天25的数据并且不包括所有26,你需要删除26的第一秒:

where myDate >= Date '2009-08-25' and myDate < Date '2009-08-26'
Run Code Online (Sandbox Code Playgroud)

要么

where myDate between Date '2009-08-25' and Date '2009-08-26' - interval '1' second
Run Code Online (Sandbox Code Playgroud)

更新 - 有点精确:在Oracle中,DATE数据类型既可用于带有或不带时间的"日期"类型.如果您在没有时间的情况下处理日期,通常会将其存储在00:00时间段,即午夜.因此,(my_date between '2009-08-25' and '2009-08-26')之间的第一个可能会选择两整天.

通过删除26的第一秒,您可以确保不会无意中从26中选择行.

  • 如果你想检查一个日期的时间组件是否包含午夜,你可以搜索:"WHERE trunc(mydate)= mydate",你也可以检查时间是00:"WHERE to_char(mydate,'hh24miss' )='000000'" (2认同)