如何将T-SQL日期相关查询代码正确转换为MySQL实现
原始T-SQL逻辑说明
原MS SQL Server代码的核心作用是:
- 截断输入时间戳的时间部分,仅保留日期数据
- 按照美国英语区短日期规则(MM/dd/yyyy,月/日/年,数字无前导零)格式化输出
示例输入2021-08-03 00:00:00的预期输出为8/3/2021。
现有MySQL代码错误点
- 函数误用:MySQL内置
FORMAT函数仅用于数字格式化,无法处理日期格式化需求,日期格式化需使用DATE_FORMAT函数 - 逻辑错误:
DATEDIFF(NOW(), ma.Timestamp)计算的是当前时间与目标字段的天数差,完全不符合原代码「保留原日期、仅移除时间部分」的需求 - 多余操作:
ADDDATE(xxx, INTERVAL 0 DAY)无实际业务作用,属于冗余代码
修正后代码
固定示例输入测试版本
SELECT DATE_FORMAT('2021-08-03 00:00:00', '%c/%e/%Y') AS `day`;
业务字段适配版本(对应ma.Timestamp字段)
SELECT DATE_FORMAT(ma.Timestamp, '%c/%e/%Y') AS `day` FROM 你的业务表名 ma;
格式符匹配说明
DATE_FORMAT使用的格式符和原T-SQL规则完全对齐:
%c:输出月份数字,无前导零,匹配原格式的月份输出规则%e:输出日期数字,无前导零,匹配原格式的日期输出规则%Y:输出4位完整年份,匹配原格式的年份输出规则
测试输入2021-08-03 00:00:00时,上述代码输出结果和原T-SQL输出完全一致。
内容的提问来源于stack exchange,提问作者need_help12
相关产品推荐
相关产品推荐

