首页 > 解决方案 > 如何仅按时间部分比较日期时间列

问题描述

我需要编写 SQL 查询,它将为我提供 datetime 值的日期与 datetime 值Creation_date的日期相同的所有行Status_date。此外,此日期时间值的时间部分必须在此查询的 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 行就可以在我的结果中。

提前致谢!

标签: sqloracle

解决方案


这是一个有点冗长的查询,但如果你使用的是 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');

推荐阅读