检查当前日期是不是在两个日期之间 Oracle SQL
Posted
技术标签:
【中文标题】检查当前日期是不是在两个日期之间 Oracle SQL【英文标题】:Check if current date is between two dates Oracle SQL检查当前日期是否在两个日期之间 Oracle SQL 【发布时间】:2014-06-17 09:30:31 【问题描述】:如果当前日期在 Oracle SQL 的两个日期之间,我想选择 1
。
我在阅读其他问题后写了一个SQL。
https://***.com/questions/2369222/oracle-date-between-query
https://***.com/questions/2399753/select-from-table-by-knowing-only-date-without-time-oracle
但它只返回空值。 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');
和
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');
【问题讨论】:
您需要TO_DATE()
sysdate 吗?肯定已经是约会了
感谢paul,根据Gordon Linoffs 下面sysdate
的解决方案已经是约会了。
你不需要 SQL - 在 PL/SQL 中你可以像if sysdate between date '2014-02-28' and date '2014-06-21' then v := 1; end if;
谢谢Jeffrey Kemp 这对我也很好。
【参考方案1】:
您无需将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');
如果您关心日期的时间部分,请使用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');
【讨论】:
trunc(sysdate)
在此示例中(双表)可以处理日期的时间部分,但在具有索引 DATE 字段的实际表中,它可能会阻止 Oracle 使用相应的索引。我建议不要使用“between”子句,而是在这里使用比较运算符:where DATE_FIELD >= TO_DATE('28/02/2014', 'DD/MM/YYYY') and DATE_FIELD < TO_DATE('20/06/2014', 'DD/MM/YYYY') + 1
另一种处理索引的方法来自dba-oracle.com/t_sql_display_all_days_between_two_dates.htm:select ... where trunc(ORDER_DATE) between ...
注意:使用 trunc 函数将使 order_date 上的索引无效,您可能希望在上创建一个基于函数的临时索引trunc(order_date)
@Aba 。 . .我错过了什么吗?这个问题中没有order_date
,也没有双索引。
@GordonLinoff 我只是在评论 trunc() 和 anilech 在处理真实表时发现的索引问题。【参考方案2】:
SELECT to_char(emp_login_date,'DD-MON-YYYY HH24:MI:SS'),A.*
FROM emp_log A
WHERE emp_login_date BETWEEN to_date(to_char('21-MAY-2015 11:50:14'),'DD-MON-YYYY HH24:MI:SS')
AND
to_date(to_char('22-MAY-2015 17:56:52'),'DD-MON-YYYY HH24:MI:SS')
ORDER BY emp_login_date
【讨论】:
一般来说,如果答案包含对代码的用途的解释,以及为什么在不介绍其他人的情况下解决问题的原因,答案会更有帮助。 (该帖子至少被一位用户标记,大概是因为他们认为应该删除没有解释的答案。) 这很有魅力。只需要了解 to_date 的格式。【参考方案3】:TSQL: 日期 - 需要寻找两个日期之间的日期间隔
select
distinct
e1.enddate,
e3.startdate,
DATEDIFF(DAY,e1.enddate,e3.startdate)-1 as [Datediff]
from #temp e1
join #temp e3 on e1.enddate < e3.startdate
/* Finds the next start Time */
and e3.startdate = (select min(startdate) from #temp e5
where e5.startdate > e1.enddate)
and not exists (select * /* Eliminates e1 rows if it is overlapped */
from #temp e5
where e5.startdate < e1.enddate and e5.enddate > e1.enddate);
【讨论】:
以上是关于检查当前日期是不是在两个日期之间 Oracle SQL的主要内容,如果未能解决你的问题,请参考以下文章
检查日期是不是在另一个数据框中的两个日期之间,如果是则操作日期