我有这样的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,因为它太慢了。
答案 0 :(得分:10)
假设date_enter
是DATE
字段:
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_char
或date_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.