学而实习之 不亦乐乎

MySQL 使用 STR_TO_DATE() 函数将字符串转换成日期

2024-04-14 19:38:52

一、用法简介

语法:

STR_TO_DATE(string, format);

STR_TO_DATE()根据fmt格式字符串将str字符串转换为日期值。 STR_TO_DATE()函数可能会根据输入和格式字符串返回DATE,TIME或DATETIME值。 如果输入字符串是非法的,则STR_TO_DATE()函数返回NULL。

STR_TO_DATE()函数扫描输入字符串来匹配格式字符串。格式字符串可能包含以百分比(%)字符开头的文字字符和格式说明符。 查看格式说明符列表的DATE_FORMAT函数。

STR_TO_DATE()函数在数据迁移中非常有用,涉及从外部格式到MySQL时间数据格式的时间数据转换。

二、实例

将字符串转换为DATE值,如下所示

mysql> SELECT STR_TO_DATE('21,5,2018','%d,%m,%Y');
+-------------------------------------+
| STR_TO_DATE('21,5,2018','%d,%m,%Y') |
+-------------------------------------+
| 2018-05-21                          |
+-------------------------------------+
1 row in set

根据格式字符串格式'%d,%m,%Y',STR_TO_DATE()函数扫描'21,5,2018'输入字符串。

首先,它尝试在输入字符串中找到%d格式说明符的匹配项,这是一个月的日期(01 … 31)。 因为21号与%d说明符相匹配,所以该函数将21作为日期值。第二步,因为格式字符串中的逗号(,)字符串与输入字符串中的逗号匹配,所以函数继续检查第二个格式说明符%m,这是一个月(01 … 12),并且发现数字 5与%m格式说明符匹配。以数字5为月份。第三步,在匹配第二个逗号(,)之后,STR_TO_DATE()函数会继续找到第三个格式说明符%Y的匹配项,它是四位数的年份,例如2012,2013等,它的编号为2013 年值。

STR_TO_DATE()函数在根据格式字符串解析输入字符串时忽略输入字符串末尾的额外字符。 请参阅以下示例:

mysql> SELECT STR_TO_DATE('21,5,2013 extra characters','%d,%m,%Y');
+------------------------------------------------------+
| STR_TO_DATE('21,5,2013 extra characters','%d,%m,%Y') |
+------------------------------------------------------+
| 2013-05-21                                           |
+------------------------------------------------------+
1 row in set

STR_TO_DATE()将输入字符串不提供的所有不完整的日期值设置为零。 请参阅以下示例:

mysql> SELECT STR_TO_DATE('2018','%Y');
+--------------------------+
| STR_TO_DATE('2018','%Y') |
+--------------------------+
| NULL                     |
+--------------------------+
1 row in set

因为输入字符串只提供年值,所以STR_TO_DATE()函数返回一个日期值,它的月和日设置为零。

以下示例将时间字符串转换为TIME值:

mysql> SELECT STR_TO_DATE('113005','%h%i%s');
+--------------------------------+
| STR_TO_DATE('113005','%h%i%s') |
+--------------------------------+
| NULL                           |
+--------------------------------+
1 row in set

类似于未指定的日期部分,STR_TO_DATE()函数将未指定的时间部分设置为零,请参见以下示例:

mysql> SELECT STR_TO_DATE('11','%h');
+------------------------+
| STR_TO_DATE('11','%h') |
+------------------------+
| NULL                   |
+------------------------+
1 row in set

以下示例将字符串转换为DATETIME值,因为输入字符串提供日期和时间部分。

mysql> SELECT STR_TO_DATE('20130101 1130','%Y%m%d %h%i') ;
+--------------------------------------------+
| STR_TO_DATE('20130101 1130','%Y%m%d %h%i') |
+--------------------------------------------+
| 2013-01-01 11:30:00                        |
+--------------------------------------------+
1 row in set