# **STR_TO_DATE()**

## **函数说明**

`STR_TO_DATE()` 函数按照指定日期或时间显示格式，将字符串转换为日期或日期时间类型，与 [`TO_DATE()`](to-date.md) 同义。

格式字符串可以包含文字字符和以%开头的格式说明符。format 中的字面字符与格式说明符必须与 str 匹配，支持表达式。如果不能按照 format 解析 str 或者其中任何一个参数为 NULL，`STR_TO_DATE` 函数将返回 NULL。

有关可以使用的格式说明符，请参阅 [`DATE_FORMAT()`](date-format.md) 函数描述。

## **函数语法**

```text
> STR_TO_DATE(str,format)
```

## **参数释义**

|  参数   | 说明 |
|  ----  | ----  |
| str    | 要格式化为日期的字符串 (输入字符串)   |
| format | 要使用的格式字符串  |

## **示例**

```text
mysql> SELECT STR_TO_DATE('2022-01-06 10:20:30','%Y-%m-%d %H:%i:%s') as result;
+---------------------+
| result              |
+---------------------+
| 2022-01-06 10:20:30 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT STR_TO_DATE('09:30:17','%h:%i:%s');
+---------------------------------+
| str_to_date(09:30:17, %h:%i:%s) |
+---------------------------------+
| 09:30:17                        |
+---------------------------------+
1 row in set (0.00 sec)

-- format 参数支持表达式
mysql> SELECT str_to_date('2008-01-01',replace('yyyy-MM-dd','yyyy-MM-dd','%Y-%m-%d')) as result;
+------------+
| result     |
+------------+
| 2008-01-01 |
+------------+
1 row in set (0.00 sec)

--STR_TO_DATE 函数在根据格式字符串 format 解析输入字符串 str 时，忽略输入字符串 str 末尾的额外字符
mysql> SELECT STR_TO_DATE('25,5,2022 extra characters','%d,%m,%Y');
+---------------------------------------------------+
| str_to_date(25,5,2022 extra characters, %d,%m,%Y) |
+---------------------------------------------------+
| 2022-05-25                                        |
+---------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT STR_TO_DATE('2022','%Y');
+-----------------------+
| str_to_date(2022, %Y) |
+-----------------------+
| NULL                  |
+-----------------------
```
