You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

更新表中每行update字段为restartDate与startDate的较新日期

解决方法

你遇到的问题核心是字段名update为SQL保留关键字,直接使用会导致解析异常,同时原SQL的VALUES子查询写法在部分数据库中处理逻辑不符合预期。结合你的需求(restartDate非空、startDate可为空),可以采用以下可靠写法:

方法1:用GREATEST+COALESCE组合

通过COALESCE将空的startDate替换为restartDate,再用GREATEST取两者最大值:

UPDATE mytable
SET `update` = GREATEST(restartDate, COALESCE(startDate, restartDate));
  • 当startDate非空时,直接比较两个日期取较新值;
  • 当startDate为空时,COALESCE返回restartDate,最终结果即为restartDate本身。

方法2:用CASE语句明确逻辑

如果你的数据库对GREATEST处理null的行为不一致,可通过CASE逻辑直接判断:

UPDATE mytable
SET `update` = CASE
    WHEN startDate IS NOT NULL AND startDate > restartDate THEN startDate
    ELSE restartDate
END;

该写法逻辑直观:仅当startDate存在且晚于restartDate时取startDate,其余情况均取restartDate。

关键注意事项

  • 字段名update是SQL保留关键字,必须用反引号(MySQL)、双引号(PostgreSQL/SQL Server需开启QUOTED_IDENTIFIER)或方括号(SQL Server)包裹,避免解析错误;
  • 原SQL的VALUES子查询写法在部分数据库中无法正确识别字段值,可能意外触发默认值(如当前日期)。

验证结果

示例1执行后:

restartDatestartDateupdate
2022-11-11null2022-11-11

示例2执行后:

restartDatestartDateupdate
2022-11-012022-11-052022-11-05

内容的提问来源于stack exchange,提问作者sud0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:20:39