我有一个这样的Oracle SELECT Query:
Select * From Customer_Rooms CuRo
Where CuRo.Date_Enter Between 'TODAY 12:00:00 PM' And 'TODAY 11:59:59 PM'
Run Code Online (Sandbox Code Playgroud)
我的意思是,我想选择今天"date_enter"字段的所有内容.我已经尝试过像Trunc(Sysdate) || ' 12:00:00'
之间的事情,没有用.
建议:我不能使用TO_CHAR,因为它太慢了.
Ale*_*ole 13
假设date_enter
是一个DATE
字段:
Select * From Customer_Rooms CuRo
Where CuRo.Date_Enter >= trunc(sysdate)
And CuRo.Date_Enter < trunc(sysdate) + 1;
Run Code Online (Sandbox Code Playgroud)
该trunc()
功能默认删除时间部分,所以trunc(sysdate)
今天早上给你午夜.
如果你特别想坚持between
,而你DATE
没有TIMESTAMP
,你可以这样做:
Select * From Customer_Rooms CuRo
Where CuRo.Date_Enter between trunc(sysdate)
And trunc(sysdate) + interval '1' day - interval '1' second;
Run Code Online (Sandbox Code Playgroud)
between
是包容性的,所以如果你不休息一下那么你可能会从今晚午夜开始接收记录; 所以这会产生你在原始查询中寻找的23:59:59时间.但在我看来,无论如何,使用>=
并且<
更清晰,更明确.
如果你确定你不能在今天晚些时候提供日期,那么上限并没有真正添加任何东西,你只需得到相同的结果:
Select * From Customer_Rooms CuRo
Where CuRo.Date_Enter >= trunc(sysdate);
Run Code Online (Sandbox Code Playgroud)
你不想在列上使用trunc
或者; 使用任何函数都可以防止使用该列的索引,这就是您的查询速度太慢的原因.to_char
date_enter
to_char