我需要编写SQL查询,该查询将为我提供datetime值Creation_date
的日期与datetime值Status_date
的日期相同的所有行。另外,此datetime值的时间部分必须在此查询的where子句中-值Status_date
的确切时间部分必须在值Creation_date
的时间部分和凌晨4点之间,也应是Creation_date
需要从午夜到凌晨2点。
我想我知道第一部分
select *
from a_orders
where trunc(Creation_date)=trunc(Status_date) and ??
表格:
Creation_date Status_date
1.2019-08-26 00:02:10 2019-08-26 08:35:02
2.2019-08-26 00:02:20 2019-08-26 09:15:18
3.**2019-08-26 00:02:41 2019-08-26 00:20:08**
4.**2019-08-26 00:02:48 2019-08-26 00:20:08**
5.2019-07-29 00:05:28 2019-07-30 00:40:29
在上表中,我只需要第3和4.行即可。
预先感谢!
答案 0 :(得分:1)
查询时间有点长,但是如果您使用的是Oracle,请尝试此操作,看看它是否有效
where trunc(Creation_date)=trunc(Status_date)
and Creation_date between to_date(to_char(d.Creation_date,'MM/DD/YYYY') || ' 00:00','MM/DD/YYYY HH24:MI') and to_date(to_char(d.Creation_date,'MM/DD/YYYY') || ' 02:00','MM/DD/YYYY HH24:MI')
and Status_date between d.Creation_date and to_date(to_char(d.Creation_date,'MM/DD/YYYY') || ' 04:00','MM/DD/YYYY HH24:MI');
答案 1 :(得分:0)
由于您使用了TRUNC
函数,所以我想我们正在谈论Oracle,并且列的类型为DATE
或TIMESTAMP
。
Creation_date必须是从午夜到凌晨2点:
Creation_date - TRUNC(Creation_date) <= 2/24
状态日期必须在值Creation_date的时间部分之间 和4AM:
Status_date BETWEEN Creation_date AND (TRUNC(Status_date) + 4/24)
后者是因为您之前检查过两个日期具有相同的日期部分。