小编典典

Oracle选择今天之间的日期

sql

我有一个像这样的Oracle SELECT查询:

Select * From Customer_Rooms CuRo
   Where CuRo.Date_Enter Between 'TODAY 12:00:00 PM' And 'TODAY 11:59:59 PM'

我的意思是,我想选择字段“ date_enter”今天所在的所有位置。我已经尝试过类似Trunc(Sysdate) || ' 12:00:00'的操作,但是没有用。

忠告: 我不能使用TO_CHAR,因为它变得太慢。


阅读 39

收藏
2021-04-07

共1个答案

小编典典

假设date_enter是一个DATE字段:

Select * From Customer_Rooms CuRo
   Where CuRo.Date_Enter >= trunc(sysdate)
   And CuRo.Date_Enter < trunc(sysdate) + 1;

trunc()默认情况下,该功能会删除时间部分,因此trunc(sysdate)您可以在今天早晨午夜12点前使用该功能。

如果您特别想坚持使用between,而DATE不是TIMESTAMP,则可以执行以下操作:

Select * From Customer_Rooms CuRo
   Where CuRo.Date_Enter between trunc(sysdate)
      And trunc(sysdate) + interval '1' day - interval '1' second;

between是包容性的,因此,如果您不休息一会儿,那么您有可能会在今晚的午夜准确地获取记录;因此,这会生成您在原始查询中寻找的23:59:59时间。但我认为无论如何,使用>=<会更清晰,更明确。

如果您确定无论如何都不能晚于今天的日期,则上限实际上并没有添加任何内容,您将得到与以下相同的结果:

Select * From Customer_Rooms CuRo
   Where CuRo.Date_Enter >= trunc(sysdate);

但是,您不想使用truncto_char在该date_enter列上;使用任何函数都会阻止使用该列上的索引,这就是为什么查询to_char速度太慢的原因。

2021-04-07