Oracle中带日期的过滤条件不生效问题求助
日期查询返回0行数据的排查原因
日期格式不匹配
数据库对DATE类型的解析有默认格式(如YYYY-MM-DD或DD-MM-YYYY),你使用的'12-04-14'这种两位年份的短格式,很可能被数据库错误解析(比如将12识别为年份、04为月份,导致无效日期)。建议用标准格式或显式转换函数:- MySQL:
SELECT * FROM changerequests WHERE createdon = STR_TO_DATE('12-04-14', '%d-%m-%y') AND lastmodifiedon = STR_TO_DATE('17-05-14', '%d-%m-%y'); - Oracle:
SELECT * FROM changerequests WHERE createdon = TO_DATE('12-04-14', 'DD-MM-RR') AND lastmodifiedon = TO_DATE('17-05-14', 'DD-MM-RR');
- MySQL:
时间精度/时区问题
部分数据库的DATE类型实际包含时分秒(如Oracle),如果表中记录的日期带时间(例如2014-04-12 14:30:00),用纯日期字符串查询会匹配失败(默认解析为当天00:00:00)。这种情况改用范围或截断查询:-- 范围查询 SELECT * FROM changerequests WHERE createdon BETWEEN '2014-04-12' AND '2014-04-13' AND lastmodifiedon BETWEEN '2014-05-17' AND '2014-05-18'; -- MySQL日期截断 SELECT * FROM changerequests WHERE DATE(createdon) = '2014-04-12' AND DATE(lastmodifiedon) = '2014-05-17';日期顺序错误
若你预期的是DD-MM-YY格式,但数据库默认解析为MM-DD-YY,'12-04-14'会被识别为2014年12月4日,和实际的4月12日记录不匹配。可先查询数据库日期格式设置:- MySQL:
SELECT @@date_format; - Oracle:
SELECT value FROM v$nls_parameters WHERE parameter = 'NLS_DATE_FORMAT';
确认后调整查询的日期写法。
- MySQL:
实际数据不匹配
先执行简单查询验证数据:SELECT createdon, lastmodifiedon FROM changerequests LIMIT 10;查看实际存储的日期值是否和你预期的
12-04-14、17-05-14一致,可能存在记录日期和你假设不符的情况。
内容的提问来源于stack exchange,提问作者Nadeem
相关产品推荐
相关产品推荐

