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

MySQL中如何为r_238表Answer列的时间数据减去2小时?

没问题,我来帮你搞定这个需求。咱们需要精准识别有效日期时间行,把这些时间减去2小时后更新回去,同时保留值为"NO"的记录不动。以下是具体的代码方案:

解决方案代码示例

基础版本(适用于所有支持STR_TO_DATE的MySQL版本)

这个语句会安全地只处理符合格式的有效时间行,避免转换失败报错:

UPDATE r_238
SET Answer = DATE_FORMAT(
    DATE_SUB(
        STR_TO_DATE(Answer, '%Y-%m-%d %h:%i:%s%p'),
        INTERVAL 2 HOUR
    ),
    '%Y-%m-%d %h:%i:%s%p'
)
WHERE Answer != 'NO'
  AND STR_TO_DATE(Answer, '%Y-%m-%d %h:%i:%s%p') IS NOT NULL;

更安全的8.0+版本

如果你的MySQL是8.0及以上,可以用TRY_STR_TO_DATE容错,即使存在少数格式异常的行,也不会导致整个更新中断:

UPDATE r_238
SET Answer = DATE_FORMAT(
    DATE_SUB(
        TRY_STR_TO_DATE(Answer, '%Y-%m-%d %h:%i:%s%p'),
        INTERVAL 2 HOUR
    ),
    '%Y-%m-%d %h:%i:%s%p'
)
WHERE Answer != 'NO'
  AND TRY_STR_TO_DATE(Answer, '%Y-%m-%d %h:%i:%s%p') IS NOT NULL;

关键部分解释

  • STR_TO_DATE(Answer, '%Y-%m-%d %h:%i:%s%p'):把text类型的字符串转换为MySQL可识别的datetime类型,格式符完全匹配你提供的2018-03-06 03:18:17pm格式。
  • DATE_SUB(..., INTERVAL 2 HOUR):对转换后的datetime执行减2小时操作。
  • DATE_FORMAT(..., '%Y-%m-%d %h:%i:%s%p'):把处理后的datetime转回原字符串格式,确保和Answer列的text类型兼容。
  • WHERE条件:精准筛选出需要处理的行,排除"NO"和无法转换为有效时间的记录。

重要提醒

执行更新前一定要先验证结果,可以用下面的SELECT语句预览修改效果:

SELECT 
    Answer AS original_value,
    DATE_FORMAT(
        DATE_SUB(
            STR_TO_DATE(Answer, '%Y-%m-%d %h:%i:%s%p'),
            INTERVAL 2 HOUR
        ),
        '%Y-%m-%d %h:%i:%s%p'
    ) AS updated_value
FROM r_238
WHERE Answer != 'NO'
  AND STR_TO_DATE(Answer, '%Y-%m-%d %h:%i:%s%p') IS NOT NULL;

内容的提问来源于stack exchange,提问作者ברק רוזנפלד

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:52:41