Oracle SQL查询当日15:00前及历史全量入库记录
Oracle查询:筛选当日15:00前及历史全量记录
可以通过以下两种方式实现需求,核心思路是生成当日15:00:00的时间阈值,筛选所有入库时间早于该阈值的记录:
方法一:使用TRUNC+INTERVAL(推荐)
SELECT * FROM 你的表名 WHERE dstamp < TRUNC(SYSDATE) + INTERVAL '15' HOUR;
逻辑说明:
TRUNC(SYSDATE):将当前系统日期截断至当日00:00:00(比如当前是2023-03-26 15:10,截断后为2023-03-26 00:00:00)+ INTERVAL '15' HOUR:在当日0点基础上添加15小时,得到当日15:00:00的时间点- 条件
dstamp < 该时间点自动覆盖:- 所有历史日期的全量记录(历史日期的入库时间必然早于当日15点)
- 当日15:00之前的入库记录
- 自动排除当日15:00之后的新增记录
方法二:使用TO_CHAR+TO_DATE拼接
如果习惯用字符串拼接的方式构造时间阈值,也可以这么写:
SELECT * FROM 你的表名 WHERE dstamp < TO_DATE(TO_CHAR(SYSDATE, 'YYYY-MM-DD') || ' 15:00:00', 'YYYY-MM-DD HH24:MI:SS');
逻辑说明:
TO_CHAR(SYSDATE, 'YYYY-MM-DD'):提取当前日期的年月日部分(如"2023-03-26")- 拼接
' 15:00:00'得到当日15点的时间字符串(如"2023-03-26 15:00:00") TO_DATE将字符串转换为日期时间类型,与dstamp进行比较
注意事项
- 确保
dstamp字段是DATE或TIMESTAMP类型;如果是字符串存储,需先通过TO_DATE转换为日期类型再比较(不建议用字符串存储时间) - 两种写法对
DATE和TIMESTAMP类型的dstamp都适用,Oracle会自动处理类型转换
内容的提问来源于stack exchange,提问作者Markvet
相关产品推荐
相关产品推荐

