SQL查询编写咨询:查找ExamDate≤ResultDate或ResultDate缺失的记录
解决查询ExamDate早于ResultDate或ResultDate缺失记录的问题
首先,你原语句里用了ExamDate <= ResultDate,但需求是“早于”,应该改成ExamDate < ResultDate,这是第一个需要调整的细节。
如果你的查询还有其他分类过滤条件,逻辑运算符优先级是导致冲突的关键——AND的优先级比OR高,直接拼接条件会让逻辑偏离预期。比如你原本想筛选某分类下符合日期条件的记录,写:
WHERE Category = '指定分类' AND ExamDate < ResultDate OR ResultDate IS NULL
数据库会把它解析成(Category = '指定分类' AND ExamDate < ResultDate) OR ResultDate IS NULL,结果会把所有ResultDate为空的记录都拉出来,不管分类是否匹配,这就和你的分类条件冲突了。
正确的写法是把OR的两个条件用括号括起来,让它作为一个整体和其他条件结合:
WHERE Category = '指定分类' AND (ExamDate < ResultDate OR ResultDate IS NULL)
另外还要注意数据类型问题:如果ExamDate和ResultDate是字符串类型而非日期类型,直接比较会按字符串排序逻辑判断,可能出现不符合预期的结果。需要先转换成日期类型再比较,比如MySQL用STR_TO_DATE,SQL Server用CONVERT,示例如下:
-- MySQL示例 WHERE (STR_TO_DATE(ExamDate, '%Y-%m-%d') < STR_TO_DATE(ResultDate, '%Y-%m-%d') OR ResultDate IS NULL)
总结下来,核心条件应该是包裹在括号里的(ExamDate < ResultDate OR ResultDate IS NULL),搭配其他条件时务必保留括号,避免逻辑优先级错误。
内容的提问来源于stack exchange,提问作者user12501522
相关产品推荐
相关产品推荐

