检查当前日期是否在Oracle SQL的两个日期之间

Avi*_*mar 34 sql oracle date between sysdate

我想1通过Oracle SQL 选择当前日期是否介于2个日期之间.

我在阅读完其他问题后写了一篇SQL.

/sf/ask/165845571/

/sf/ask/167982741/

但它只返回null.sysdate是以01/05/2014日期格式表示的当前日期DD/MM/YYYY.

我写的SQL是:

select 1 from dual 
WHERE to_date(sysdate,'DD/MM/YYYY') 
BETWEEN TO_DATE('28/02/2014', 'DD/MM/YYYY')
AND TO_DATE('20/06/2014', 'DD/MM/YYYY');
Run Code Online (Sandbox Code Playgroud)

select 1 from dual 
WHERE to_date(sysdate,'DD/MM/YYYY') >= TO_DATE('28/02/2014', 'DD/MM/YYYY') 
AND to_date(sysdate,'DD/MM/YYYY') < TO_DATE('20/06/2014', 'DD/MM/YYYY'); 
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 64

你不需要申请to_date()sysdate.它已经存在:

select 1
from dual 
WHERE sysdate BETWEEN TO_DATE('28/02/2014', 'DD/MM/YYYY') AND TO_DATE('20/06/2014', 'DD/MM/YYYY');
Run Code Online (Sandbox Code Playgroud)

如果您担心日期中的时间组件,请使用trunc():

select 1
from dual 
WHERE trunc(sysdate) BETWEEN TO_DATE('28/02/2014', 'DD/MM/YYYY') AND
                             TO_DATE('20/06/2014', 'DD/MM/YYYY');
Run Code Online (Sandbox Code Playgroud)

  • 这个例子中的`trunc(sysdate)`(双表)可以处理日期的时间部分,但是在带有索引的DATE字段的真实表中它可能会阻止Oracle使用相应的索引。我建议不要使用“之间”子句,而是在此处使用比较运算符:`where DATE_FIELD &gt;= TO_DATE('28/02/2014', 'DD/MM/YYYY') and DATE_FIELD &lt; TO_DATE('20/06/2014' , 'DD/MM/YYYY') + 1` (2认同)