Oracle数据库DATE类型数据非包含式查询:提取14号数据
Oracle SQL:非包含式日期范围查询提取指定日期数据
嘿,针对你要从Oracle表里提取REQUEST_DATE为14/04/18的数据的需求,用非包含式的日期范围查询是最稳妥的做法——毕竟Oracle的DATE类型自带时分秒信息,直接用=匹配的话,只会抓当天00:00:00的记录,漏掉那些带具体时间的行可就麻烦了。
直接上可用的SQL语句(记得把your_table_name替换成你的实际表名):
SELECT ID, REFERENCE, REQUEST_DATE FROM your_table_name WHERE REQUEST_DATE >= TO_DATE('14/04/18', 'DD/MM/YY') AND REQUEST_DATE < TO_DATE('15/04/18', 'DD/MM/YY');
为什么这么写?
- 用
>= TO_DATE('14/04/18', 'DD/MM/YY')匹配14/04/18当天00:00:00及之后的所有记录 - 用
< TO_DATE('15/04/18', 'DD/MM/YY')匹配15/04/18当天00:00:00之前的所有记录 - 这样就精准覆盖了14/04/18一整天的所有数据,不管
REQUEST_DATE里的时分秒是什么值,而且完全符合你要求的非包含式日期范围查询(没有用=直接匹配日期)
另外提一句,有人会用TRUNC函数来处理日期,但这种写法如果REQUEST_DATE字段上建有索引的话,会导致索引失效,影响查询效率,所以更推荐上面的范围查询写法:
-- 不推荐(可能影响索引使用),仅作参考 SELECT ID, REFERENCE, REQUEST_DATE FROM your_table_name WHERE TRUNC(REQUEST_DATE) = TO_DATE('14/04/18', 'DD/MM/YY');
内容的提问来源于stack exchange,提问作者Genaut




