SQL中按条件修正datetime类型delivery_date列的正确方法
正确的SQL实现方案
你的原查询问题在于CASE表达式的写法错误——CASE需要返回具体的字段值,而不是使用=进行赋值操作。以下是两种符合需求的实现方案:
方案1:查询时修正显示值(不修改原表数据)
如果只是需要在查询结果中修正delivery_date的值,而不改动原表数据,可以使用以下SQL:
SELECT id, order_date, CASE WHEN delivery_date < order_date THEN order_date ELSE delivery_date END AS delivery_date FROM your_table_name; -- 替换成你的实际表名
方案2:直接更新原表数据
如果需要永久修正原表中的错误数据,使用UPDATE语句:
UPDATE your_table_name SET delivery_date = order_date WHERE delivery_date < order_date; -- 只更新delivery_date早于order_date的行
执行后的查询结果(对应方案1)
| id | order_date | delivery_date |
|---|---|---|
| 1 | 2023-01-23 | 2023-01-26 |
| 2 | 2023-05-21 | 2023-05-29 |
| 3 | 2023-06-03 | 2023-06-03 |
| 4 | 2023-07-04 | 2023-07-20 |
| 5 | 2023-08-21 | 2023-08-21 |
内容的提问来源于stack exchange,提问作者Victor Barreto
相关产品推荐
相关产品推荐

