Oracle选择今天之间的日期

时间:2014-08-01 16:13:42

标签: sql oracle select

我有这样的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,因为它太慢了。

4 个答案:

答案 0 :(得分:10)

假设date_enterDATE字段:

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

默认情况下,trunc()功能会删除时间部分,因此trunc(sysdate)会在今晚的午夜为您提供。{/ p>

如果你特别想坚持使用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);

您不希望在trunc列上使用to_chardate_enter;使用任何函数都可以防止使用该列的索引,这就是to_char查询速度太慢的原因。

答案 1 :(得分:0)

在我的情况下,我正在搜索一些日志文件,并且只想找到今天发生的日志文件。

对我来说,它发生的时间并不重要,只需要今天,所以:

/*...*/
where
    trunc(_DATETIMEFROMSISTEM_) = trunc(sysdate)

它适合这种情况。

答案 2 :(得分:0)

是的,你可以写这样的查询

select * from table_name where last_time<=CURRENT_TIME() and last_date<=CURRENT_DATE() 

答案 3 :(得分:-1)

尝试以下代码

Select * From Customer_Rooms CuRo
   Where trunc(CuRo.Date_Enter) = 'TODAY' -- TODAY is the date of today without any timestamp.