4人参与 • 2025-03-09 • Mysql
前面我们利用 date_formate() 函数,按照自己希望的格式来输出日期时间。
我们从用户界面接收到的信息都是以字符串的形式在进行传递,如何把字符串转换为日期类型进行存储呢?可使用 str_to_date()
函数。
需要注意以下几点:
-
区分日期各部分,结果会自动用 -
拼接日期各个部分;:
区分时间各部分,结果中的时间部分会自动用 :
连接各个部分。str_to_date()
函数的用法和 date_format()
基本一致,只是输出数据的类型不同,前提都需要熟悉输出格式,参照date_format()
。
(这一段说明是针对 mysql 的,webide 使用的是兼容 mysql 的 mariadb,在此环境下进行下面 5 点说明的实验,可能会得到不同结果):
待转换字符串中只能出现数字,否则返回结果为 null。
select str_to_date('2020070a','%y%m%d');
输出结果:
+----------------------------------+ | str_to_date('2020070a','%y%m%d') | +----------------------------------+ | null | +----------------------------------+ 1 row in set, 2 warnings (0.00 sec)
如果格式字符串仅包含日期,则待转字符串至少需要 8 位数字。
select str_to_date('202007','%y%m%d');
输出结果:
+--------------------------------+ | str_to_date('202007','%y%m%d') | +--------------------------------+ | null | +--------------------------------+ 1 row in set, 1 warning (0.00 sec)
注意:字符串 202007
低于 8 位,其结果返回 null。
转换后日期时间必须有效,否则返回结果为 null。
select str_to_date('20201301','%y%m%d');
输出结果:
+----------------------------------+ | str_to_date('20201301','%y%m%d') | +----------------------------------+ | null | +----------------------------------+ 1 row in set, 2 warnings (0.00 sec)
注意:20201301
转换为日期后得到的月份是 13,超出有效范围,故结果返回 null。
如果被转字符串超出 8 位且格式字符串中无时间格式,则自动取前 8 位转换为日期。
select str_to_date('2020070110','%y%m%d');
输出结果:
+------------------------------------+ | str_to_date('2020070110','%y%m%d') | +------------------------------------+ | 2020-07-01 | +------------------------------------+ 1 row in set, 1 warning (0.00 sec)
格式字符串可以包含时间格式。
select str_to_date('20200701104523','%y%m%d%h%i%s');
输出结果:
+----------------------------------------------+ | str_to_date('20200701104523','%y%m%d%h%i%s') | +----------------------------------------------+ | 2020-07-01 10:45:23 | +----------------------------------------------+ 1 row in set (0.00 sec)
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论