MySQL 对字符串使用 STR_TO_DATE() 函数

 Ptw-cwl


前面我们利用 date_formate() 函数,按照自己希望的格式来输出日期时间。

我们从用户界面接收到的信息都是以字符串的形式在进行传递,如何把字符串转换为日期类型进行存储呢?可使用 str_to_date() 函数。

把字符串转换为日期时间需要注意以下几点:

  • 待转换字符串中只能出现数字,否则返回结果为 null;

  • 如果格式字符串仅包含日期,则待转字符串至少需要 8 位数字,转换时默认前四位是年份,中间两位是月份,最后两位是日期,格式字符串无需使用 - 区分日期各部分,结果会自动用 - 拼接日期各个部分;

  • 转换后日期时间必须有效,否则返回结果为 null;

  • 如果被转字符串超出 8 位且格式字符串中无时间格式,则自动取前 8 位转换为日期;

  • 格式字符串可包含时间格式,格式字符串无需使用 : 区分时间各部分,结果中的时间部分会自动用 : 连接各个部分。

str_to_date() 函数的用法和 date_format() 基本一致,只是输出数据的类型不同,前提都需要熟悉输出格式,参照date_format()

接下来就上述 5 点注意事项进行举例说明(这一段说明是针对 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)

Ptw-cwl


  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ptw-cwl

谢谢老板的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值