我需要获取介于DATE和DATE_TIME列之间的记录



我在Oracle中有一个AUDIT表,DATE_AND_TIME为DATE,DATE_AND_TIME_24HOUR_FORMAT为Varchar2。我需要获取介于Date和Date_and_TIME_24HOUR_FORMAT之间的记录。例如

Record  Date_AND_TIME   DATE_AND_TIME_24HOUR_FORMAT 
1   02-Feb-2022 13:35:24    
2   02-Feb-2022 13:35:56    
3   07-Feb-2022 13:35:32    
4   07-Feb-2022 13:35:23    
5   07-Feb-2022 13:35:02    
6   07-Feb-2022 13:36:02    

我需要查询,如果我在2022年2月3日13:35:00至2022年2日7日13:35:00执行该查询,它将为我获取记录3、4、5;如果我在2020年2月7日13:36:00至2022年7月12日13:37:00执行查询,则需要记录6。

不确定为什么要这样使用列的数据类型。您只能直接使用时间戳或日期列,其中将包含DateTime信息。如果您不能更改数据类型,您可以使用以下查询-

SELECT *
FROM AUDIT
WHERE Date_AND_TIME || ' ' || DATE_AND_TIME_24HOUR_FORMAT 
BETWEEN TO_DATE('03-FEB-2022 13:35:00', 'DD-MON-YY HH24:MI:SS') 
AND TO_DATE('07-FEB-2022 13:35:00', 'DD-MON-YY HH24:MI:SS');
不要将时间值存储在VARCHAR2列中。在Oracle中,DATE数据类型ALWAYS包含年、月、日、小时、分钟和秒,因此您可以将时间存储在DATE列中。
CREATE TABLE table_name (
Record        NUMBER PRIMARY KEY,
Date_AND_TIME DATE
);

然后:

INSERT INTO table_name (record, date_and_time)
SELECT 1, TO_DATE('02-Feb-2022 13:35:24', 'DD-MON-YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2, TO_DATE('02-Feb-2022 13:35:56', 'DD-MON-YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 3, TO_DATE('07-Feb-2022 13:35:32', 'DD-MON-YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 4, TO_DATE('07-Feb-2022 13:35:23', 'DD-MON-YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 5, TO_DATE('07-Feb-2022 13:35:02', 'DD-MON-YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 6, TO_DATE('07-Feb-2022 13:36:02', 'DD-MON-YYYY HH24:MI:SS') FROM DUAL;

那么你的查询很简单:

SELECT *
FROM   table_name
WHERE  date_and_time BETWEEN TO_DATE('03-FEB-2022 13:35:00', 'DD-MON-YYYY HH24:MI:SS')
AND     TO_DATE('07-FEB-2022 13:36:00', 'DD-MON-YYYY HH24:MI:SS')

SELECT *
FROM   table_name
WHERE  date_and_time BETWEEN TO_DATE('07-FEB-2022 13:36:00', 'DD-MON-YYYY HH24:MI:SS')
AND     TO_DATE('07-FEB-2022 13:37:00', 'DD-MON-YYYY HH24:MI:SS')

db<gt;小提琴这里

最新更新