日期小于系统日期时Class字段置空的SQL语句问题求助
修正CASE语句实现日期条件下的Class字段置空逻辑
需求说明
当Date字段值小于系统当前日期(GETDATE())时,将Class字段置为NULL,否则保留原Class值。
示例数据
+----+------------+-------+ | Id | Date | class | +----+------------+-------+ | 1 | 12/31/2022 | A | | 2 | 12/31/2023 | B | | 3 | 5/11/2023 | C | | 4 | 1/15/2020 | D | +----+------------+-------+
期望结果
+----+------------+-------+ | Id | Date | class | +----+------------+-------+ | 1 | 12/31/2022 | NUll | | 2 | 12/31/2023 | B | | 3 | 5/11/2023 | C | | 4 | 1/15/2020 | NULL | +----+------------+-------+
原语句错误分析
原SQL语句存在两处问题:
- 条件逻辑写反:需求是
Date < GETDATE()时置NULL,但原语句写的是date>getdate() - CASE语法错误:
then Class as null属于语法误用,CASE表达式的结构应为CASE WHEN 条件 THEN 结果值 ELSE 其他结果值 END,无需额外的as关键字
修正后的SQL语句
1. 查询场景(返回处理后的结果)
SELECT Id, Date, CASE WHEN Date < GETDATE() THEN NULL ELSE Class END AS Class FROM 你的表名;
2. 更新场景(直接修改表中数据)
UPDATE 你的表名 SET Class = CASE WHEN Date < GETDATE() THEN NULL ELSE Class END;
验证说明
修正后的语句会正确判断日期:
- 对于
12/31/2022和1/15/2020这类早于当前日期的记录,Class被置为NULL - 对于
12/31/2023和5/11/2023这类晚于当前日期的记录,保留原Class值
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

