如何正确使用 MySQL 的 STR_TO_DATE 函数解析日期字符串

来源:IPIPP.com作者:日本程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《如何正确使用 MySQL 的 STR_TO_DATE 函数解析日期字符串》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何正确使用 MySQL 的 STR_TO_DATE 函数解析日期字符串》有用,将其分享出去将是对创作者最好的鼓励。

在MySQL数据库的实际使用中,我们经常会从外部导入数据或者接收到前端传递的日期格式字符串,这些字符串本身不是日期类型,无法直接进行日期加减、日期比较等操作,这时候就需要使用STR_TO_DATE函数将其转换为标准的日期时间类型。

如何正确使用 MySQL 的 STR_TO_DATE 函数解析日期字符串

STR_TO_DATE函数基本语法

STR_TO_DATE函数的作用是将给定的日期字符串按照指定的格式转换为日期、时间或者日期时间类型,基本语法如下:

STR_TO_DATE(str, format)

其中str是需要转换的日期字符串,format是字符串对应的日期格式,函数会按照format的规则解析str,返回对应的日期时间值,如果解析失败则返回NULL。

常用格式符说明

格式符是STR_TO_DATE函数的核心,不同的格式符对应日期字符串中不同的部分,常用的格式符可以参考下表:

格式符说明示例
%Y四位年份2024
%y两位年份24
%m月份,01到1203
%c月份,1到123
%d日期,01到3105
%e日期,1到315
%H小时,00到2314
%h小时,01到1202
%i分钟,00到5930
%s秒,00到5945
%pAM或者PMPM

不同场景的使用示例

解析标准格式日期字符串

如果日期字符串是年-月-日的格式,对应的格式符就是%Y-%m-%d,示例如下:

-- 解析2024-03-15格式的字符串
SELECT STR_TO_DATE('2024-03-15', '%Y-%m-%d') AS result;
-- 返回结果:2024-03-15

解析带时间的日期字符串

如果字符串包含时间部分,只需要补充对应的时间格式符即可,比如解析2024/03/15 14:30:25格式的字符串:

-- 解析带时间的日期字符串
SELECT STR_TO_DATE('2024/03/15 14:30:25', '%Y/%m/%d %H:%i:%s') AS result;
-- 返回结果:2024-03-15 14:30:25

解析非标准分隔符的日期字符串

日期字符串的分隔符可以是任意字符,只需要在格式符中对应位置写上相同的分隔符即可,比如解析15.03.2024格式的字符串:

-- 解析使用点作为分隔符的日期字符串
SELECT STR_TO_DATE('15.03.2024', '%d.%m.%Y') AS result;
-- 返回结果:2024-03-15

解析12小时制的时间字符串

如果时间字符串是12小时制,需要搭配%p格式符来识别AM和PM:

-- 解析12小时制的时间字符串
SELECT STR_TO_DATE('03/15/2024 02:30:25 PM', '%m/%d/%Y %h:%i:%s %p') AS result;
-- 返回结果:2024-03-15 14:30:25

常见错误及解决方法

格式符与字符串不匹配

这是最常见的错误,比如字符串是2024-3-5,月份和日期是一位数,却使用了%m%d格式符,就会导致解析失败:

-- 错误示例:格式符不匹配
SELECT STR_TO_DATE('2024-3-5', '%Y-%m-%d') AS result;
-- 返回结果:NULL

-- 正确写法:使用%c和%e匹配一位数的月份和日期
SELECT STR_TO_DATE('2024-3-5', '%Y-%c-%e') AS result;
-- 返回结果:2024-03-05

字符串包含多余字符

如果日期字符串中包含格式符没有覆盖的字符,也会导致解析失败,比如字符串是2024-03-15 星期三,后面的星期几部分没有对应的格式符:

-- 错误示例:字符串有多余字符
SELECT STR_TO_DATE('2024-03-15 星期三', '%Y-%m-%d') AS result;
-- 返回结果:NULL

-- 解决方法:可以先截取字符串再转换,或者使用忽略多余字符的方式
SELECT STR_TO_DATE(SUBSTRING('2024-03-15 星期三', 1, 10), '%Y-%m-%d') AS result;
-- 返回结果:2024-03-15

两位年份的歧义问题

使用%y解析两位年份时,MySQL默认的规则是70-99对应1970-1999,00-69对应2000-2069,如果需要自定义规则,可以通过设置default_year参数调整,不过更推荐尽量使用四位年份避免歧义。

使用注意事项

  • 转换后的日期时间类型可以直接参与日期运算,比如和CURDATE()函数的结果比较大小,或者进行DATE_ADD等运算。
  • 如果解析的字符串不符合公历日期规则,比如2月30号,函数也会返回NULL。
  • 在插入数据到日期类型的字段时,也可以直接使用STR_TO_DATE函数转换字符串后插入,避免类型不匹配的错误。
需要注意的是,STR_TO_DATE函数的返回结果类型取决于字符串解析后的内容,如果只包含日期则返回DATE类型,包含时间则返回DATETIME类型,包含时区相关则返回TIMESTAMP类型。

MySQLSTR_TO_DATE日期解析日期格式化修改时间:2026-07-05 04:09:26

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。