1. 为什么需要处理MySQL中的日期字符串
每次看到数据库里那些杂乱无章的日期字符串我就头疼。有的存成"2023/05/12",有的是"12-May-2023",还有更离谱的"051223"这种缩写格式。作为后端开发,最痛苦的不是写复杂SQL,而是处理这些五花八门的日期格式——特别是当需要做日期比较、排序或者聚合计算的时候。
MySQL原生的DATE和DATETIME类型确实好用,但现实情况是:
- 历史遗留系统的数据迁移常常带着各种非标准格式
- 第三方系统对接时对方可能用特定格式传输日期
- 前端表单提交的日期字符串格式不受控
上周我就遇到个典型场景:需要统计2023年Q2的用户注册量,结果发现user_reg_time字段里混着"April 15, 2023"、"20230415"、"15/04/2023"三种格式。这时候日期转换函数就是救命稻草了。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. MySQL日期转换核心函数详解
2.1 STR_TO_DATE() 字符串转日期
这个函数是我的日常主力工具,语法很简单:
sql复制STR_TO_DATE(字符串, 格式说明符)
关键就在于格式说明符的写法。常用的占位符包括:
%Y四位年份(2023)%y两位年份(23)%m数字月份(01-12)%M英文月份名(January-December)%d月份中的天数(01-31)%H24小时制小时(00-23)%i分钟(00-59)%s秒(00-59)
实战案例:
sql复制-- 处理"15/04/2023"格式
SELECT STR_TO_DATE('15/04/2023', '%d/%m/%Y');
-- 输出:2023-04-15
-- 处理"April 15, 2023"格式
SELECT STR_TO_DATE('April 15, 2023', '%M %d, %Y');
-- 输出:2023-04-15
-- 带时间的转换
SELECT STR_TO_DATE('2023-04-15 14:30:00', '%Y-%m-%d %H:%i:%s');
重要提示:如果格式不匹配会返回NULL而非报错,建议先用SELECT测试
