Oracle中基于TIMESTAMP字段查询15天前数据的异常问题
问题分析
你的SQL条件create_datetime <= create_datetime - 15逻辑完全错误:你是拿每条记录的create_datetime和它自身减去15(数据库默认按天处理该数值)做比较,显然任何非NULL的时间值减去15天后都会小于原时间,这个条件永远不成立,自然查不到数据。
你实际要实现的应该是「查询create_datetime早于当前时间15天前的记录」,这是这类需求的常规场景。
正确SQL写法
根据不同数据库,写法略有差异:
- MySQL/MariaDB:
或简化写法:SELECT create_datetime FROM xy WHERE create_datetime <= DATE_SUB(NOW(), INTERVAL 15 DAY);SELECT create_datetime FROM xy WHERE create_datetime <= NOW() - INTERVAL 15 DAY; - PostgreSQL:
SELECT create_datetime FROM xy WHERE create_datetime <= CURRENT_TIMESTAMP - INTERVAL '15 days'; - Oracle:
SELECT create_datetime FROM xy WHERE create_datetime <= SYSDATE - 15;
补充说明
如果你的需求确实是「查询每条记录的create_datetime早于它自身时间15天前」,这个条件本身就矛盾——一个时间不可能早于自己减去15天的时间,所以永远不会有符合条件的记录。
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

