在Oracle SQL Developer中如何从timestamp列筛选指定日期的记录?
Oracle筛选timestamp类型指定日期的操作方法
以下是3种常用实现方案,按需选择即可:
方案1:TRUNC截断法(写法最简单)
直接截断timestamp的时间部分到天,和目标日期对比即可:
SELECT * FROM 你的表名 WHERE TRUNC(col1) = TO_DATE('2019-11-29', 'YYYY-MM-DD');
注意:该写法会对col1字段做函数计算,如果col1上有索引会导致索引失效,仅适合小表或者col1无索引的场景使用。
方案2:范围查询法(性能最优,推荐)
通过时间范围匹配覆盖当日全部timestamp值,不会对字段做函数转换,可以正常使用col1上的索引,大表查询效率最高:
SELECT * FROM 你的表名 WHERE col1 >= TIMESTAMP '2019-11-29 00:00:00' AND col1 < TIMESTAMP '2019-11-30 00:00:00';
方案3:字符转换法(不推荐)
将timestamp转成日期字符串后对比,性能最差且容易因格式设置出错,非特殊场景不要使用:
SELECT * FROM 你的表名 WHERE TO_CHAR(col1, 'YYYY-MM-DD') = '2019-11-29';
额外注意事项
- 所有场景都建议显式做类型转换,不要依赖隐式转换,避免会话日期格式不同导致的查询错误
- 如果需要筛选其他日期,只需要替换对应日期值即可
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

