---场景描述
在Oracle数据库中entrydt字段是DATTETIME类的字段,根据不同业务场景约束entrydt的取值范围
1.返回值为‘2024-05-08 12:31:21’,需要查询近一年的数据量
SELECT EXTRACT(YEAR FROM entrydt) AS year, COUNT(*) AS record_count
FROM o_TCR0081_V3
WHERE entrydt BETWEEN ADD_MONTHS(TRUNC(SYSDATE), -12) AND TRUNC(SYSDATE)
GROUP BY EXTRACT(YEAR FROM entrydt)
ORDER BY year DESC;
-----在上面的sql中,EXTRACT函数来从日期中提取年份,并使用BETWEEN子句来指定日期范围,结果将返回过去一年(从当前日期算起)的按年分组的数据量。
2.如果只想返回近一年的数据(包括今天的数据)
SELECT COUNT(*) AS record_count
FROM o_TCR0081_V3
WHERE entrydt BETWEEN ADD_MONTHS(TRUNC(SYSDATE), -12) AND TRUNC(SYSDATE);
-----这个查询将返回o_TCR0081_V3表中在过去一年内(包括今天)的记录总数。
1. ADD_MONTHS(TRUNC(SYSDATE), -12)计算的是从当前日期开始的一年前的日期(时间部分被TRUNC函数截断),而TRUNC(SYSDATE)确保只比较日期部分,不包括时间。
2. TRUNC(SYSDATE)函数用于截断当前系统日期(SYSDATE)的时间部分,只保留日期部分。也就是说,如果你运行这个函数,它将返回当天的开始时间,通常是00:00:00。
3.如果今天是2024年1月1日,查询整个2023年的数据(即不包含今天的数据)
SELECT COUNT(*) AS record_count
FROM o_TCR0081_V3
WHERE entrydt BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'), -12) AND TRUNC(SYSDATE, 'YYYY') - INTERVAL '1' DAY;
4.查询最近一年每天的数据量
SELECT TRUNC(entrydt) AS day, COUNT(*) AS record_count
FROM your_table_name
WHERE entrydt >= ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'), -12)
GROUP BY TRUNC(entrydt)
ORDER BY day;
5. 查询近一小时的数据
SELECT *
FROM your_table_name
WHERE
entrydate >= TRUNC(SYSDATE - INTERVAL '1' HOUR)
AND entrydate < TRUNC(SYSDATE)
6. 查询某一时间段数据
SELECT *
FROM your_table
WHERE entrydt >= TO_TIMESTAMP('2024-05-13 18:00:00', 'YYYY-MM-DD HH24:MI:SS')
and entrydt < TO_TIMESTAMP('2024-05-13 20:00:00', 'YYYY-MM-DD HH24:MI:SS');