You need to enable JavaScript to run this app. MySQL CONCAT查询为datetime字段加2小时后返回分钟全为03的异常
优惠活动
大模型
产品
解决方案
定价
更多

MySQL CONCAT查询为datetime字段加2小时后返回分钟全为03的异常

问题产生原因

问题出在混淆了MySQL DATE_FORMAT 函数的占位符规则:

  • 你用来格式化时间的格式串%H:%m:%s中,%m对应的不是分钟值,是「两位数字表示的月份(01-12)」
  • MySQL中表示两位数字分钟值的占位符是%i,和月份的%m完全独立

拿你给出的测试值举例:
数据库存的原始时间是2021-03-11 04:44:18,加2小时偏移后得到的时间点是2021-03-11 06:44:18,用错误的%H:%m:%s格式化时:

  • %H取24小时制小时值,输出06,和你看到的正确小时值一致
  • %m取对应日期的月份值,这条记录的月份是3月,所以固定输出"03",根本不会读取实际存储的44分钟——这就是为什么所有结果的分钟都统一显示03
  • %s取两位秒值,输出18,和你看到的正确秒值一致
修复方法

你原来拆分三段做CONCAT拼接的写法是完全冗余的,不需要多次调用DATE_FORMAT拆拼内容,只需要先对原始时间做2小时偏移,再用正确的占位符一次性格式化即可,修正后的SQL:

SELECT DATE_FORMAT(DATE_ADD(dt_tracker, INTERVAL 2 HOUR), '%Y-%m-%d %H:%i:%s') AS dt_format,
       TYPE, event_desc, name, speed
FROM gs_user_events_data

用修改后的SQL查询刚才的测试记录,输出会是2021-03-11 06:44:18,分钟值和原始存储一致,2小时偏移逻辑正常,不会再出现固定输出03分钟的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 14:45:07