如何在单表查询的WHERE子句中对多列设置大于条件?
解决多列同条件大于日期的SQL写法问题
你原来的单条件写法没问题,但SQL不支持直接用逗号分隔多列后跟单个比较运算符的语法。以下是两种可行的解决方案:
方案一:逐列判断(最直观通用)
直接为每个列单独写比较条件,用AND连接,确保所有列都满足大于指定日期的要求:
SELECT * FROM DATABASE.SCHEMA.TABLE WHERE COL1 > DATEADD(day, -2, CONVERT(date, SYSDATETIME())) AND COL2 > DATEADD(day, -2, CONVERT(date, SYSDATETIME())) AND COL3 > DATEADD(day, -2, CONVERT(date, SYSDATETIME())) AND COL4 > DATEADD(day, -2, CONVERT(date, SYSDATETIME()));
如果不想重复计算日期值,可以先定义一个变量存储截止日期,让代码更简洁:
DECLARE @CutoffDate DATE = DATEADD(day, -2, CONVERT(date, SYSDATETIME())); SELECT * FROM DATABASE.SCHEMA.TABLE WHERE COL1 > @CutoffDate AND COL2 > @CutoffDate AND COL3 > @CutoffDate AND COL4 > @CutoffDate;
方案二:使用ALL子查询(简化重复条件)
通过构造临时集合,用ALL判断所有列都满足条件:
SELECT * FROM DATABASE.SCHEMA.TABLE WHERE ALL ( SELECT col FROM (VALUES (COL1), (COL2), (COL3), (COL4)) AS c(col) WHERE col > DATEADD(day, -2, CONVERT(date, SYSDATETIME())) );
为什么原来的写法失败?
SQL语法规则中,比较运算符(比如>)只能用于单个值或单个列与目标值的比较,无法直接批量处理多列。IN语法是用来判断单个值是否在集合中,也不适用这种多列同时比较的场景。
内容的提问来源于stack exchange,提问作者Lilcodemuffin
相关产品推荐
相关产品推荐

