如何用单条SQL查询小于等于多个指定日期的数据?
解决单条SQL筛选日期小于等于多个指定值的问题
首先得纠正一下你原来的语法问题:SQL里的<=运算符只能和单个值(或返回单个值的子查询)比较,不能直接跟多个值的集合。不过咱们可以根据你的实际需求来调整写法:
最常见的场景:筛选小于等于指定日期中最晚的那一天
如果你的需求是要所有日期≤2018-05-29、≤2018-05-30或者≤2018-05-31的记录,其实只需要筛选≤最晚的2018-05-31就行——因为前两个日期的结果已经包含在这个条件里了,写法超简单:
SELECT * FROM your_table WHERE date <= '31-05-2018';
⚠️ 注意:如果你的数据库对日期格式敏感(比如默认是年-月-日),最好把日期字符串转换成标准日期类型,避免解析错误:
-- MySQL示例
SELECT * FROM your_table WHERE date <= STR_TO_DATE('31-05-2018', '%d-%m-%Y');
-- PostgreSQL示例
SELECT * FROM your_table WHERE date <= TO_DATE('31-05-2018', 'DD-MM-YYYY');
特殊场景:不同记录对应不同的日期条件
如果你是想让某些记录满足≤29号,另一些满足≤30号,还有的满足≤31号(比如和其他业务字段关联),那可以用OR来组合条件:
SELECT * FROM your_table WHERE (category = 'A' AND date <= '29-05-2018') OR (category = 'B' AND date <= '30-05-2018') OR (category = 'C' AND date <= '31-05-2018');
这里的category只是示例,你可以换成自己业务里用来区分的字段。
额外提示
如果你的需求是筛选日期等于这三个日期中的某一个,或者小于等于它们,那依然可以用date <= '31-05-2018'——因为小于等于31号的范围已经自然包含了前两个日期的所有符合条件的记录。
内容的提问来源于stack exchange,提问作者user8927599
相关产品推荐
相关产品推荐

