Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add str_to_date #970

Merged
merged 2 commits into from
Feb 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# **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) 函数描述。

## **函数语法**

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

## **参数释义**

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

## **示例**

```sql
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 |
+-----------------------
```
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

补充下to_date是str_to_date的别名。

Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

## **函数说明**

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

格式字符串可以包含文字字符和以%开头的格式说明符。format 中的字面字符必须匹配 str 中的字面字符。format 中的格式说明符必须匹配 str 中的日期或时间部分。
格式字符串可以包含文字字符和以%开头的格式说明符。format 中的字面字符与格式说明符必须与 str 匹配,如果不能按照 format 解析 str 或者其中任何一个参数为 NULL,`TO_DATE` 函数将返回 NULL。

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

## **函数语法**

Expand All @@ -14,12 +16,10 @@

## **参数释义**

| Arguments | Description |
| 参数 | 说明 |
| ---- | ---- |
| str | Required. <br>如果 ``str`` 为 ``NULL``,则函数返回 ``NULL``。 <br>如果从 ``str`` 中的 ``date`` 或 ``datetime`` 值不合法,则 ``TO_DATE()`` 将返回 ``NULL`` 并产生警告。|
| format | 可选参数。表示返回值格式的格式字符串。<br> 如果省略 format,则返回一个 ``DATETIME`` 值。 <br>如果 format 为空,则返回 ``NULL``。<br>如果 format 已存在指定格式,则返回值为 ``VARCHAR``。|

说明:格式字符串可以包含文字字符和以 *%* 开头的格式说明符。``format`` 中的字面字符必须匹配 ``str`` 中的字面字符。``format`` 中的格式说明符必须匹配 ``str`` 中的日期或时间部分。
| str | 要格式化为日期的字符串 (输入字符串) |
| format | 要使用的格式字符串 |

## **示例**

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

mysql> SELECT TO_DATE('2022/11/01','%Y/%m/%d');
+-------------------------------+
| to_date(2022/11/01, %Y/%m/%d) |
+-------------------------------+
| 2022-11-01 |
+-------------------------

-- format 参数支持表达式
mysql> SELECT 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.01 sec)

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

目前 date 格式只支持 `yyyy-mm-dd` 和 `yyyymmdd` 的数据格式。
mysql> SELECT TO_DATE('2022','%Y');
+-------------------+
| to_date(2022, %Y) |
+-------------------+
| NULL |
+-------------------+
1 row in set (0.00 sec)
```
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
| [MINUTE()](./Datetime/minute.md) |返回时间参数的分钟|
| [MONTH()](./Datetime/month.md) |返回日期参数的月份|
| [SECOND()](./Datetime/second.md) |返回时间参数的秒数|
| [STR_TO_DATE()](./Datetime/str-to-date.md) |按照指定日期或时间显示格式,将字符串转换为日期或日期时间类型|
| [TIME()](./Datetime/time.md) |提取时间或日期时间的时间部分并将其作为字符串返回|
| [TIMEDIFF()](./Datetime/timediff.md) |返回两个时间参数之间的差值|
| [TIMESTAMP()](./Datetime/timestamp.md) |将日期或日期时间参数作为日期时间值返回|
Expand Down
1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -477,6 +477,7 @@ nav:
- MINUTE(): MatrixOne/Reference/Functions-and-Operators/Datetime/minute.md
- MONTH(): MatrixOne/Reference/Functions-and-Operators/Datetime/month.md
- SECOND(): MatrixOne/Reference/Functions-and-Operators/Datetime/second.md
- STR_TO_DATE(): MatrixOne/Reference/Functions-and-Operators/Datetime/str-to-date.md
- TIME(): MatrixOne/Reference/Functions-and-Operators/Datetime/time.md
- TIMEDIFF(): MatrixOne/Reference/Functions-and-Operators/Datetime/timediff.md
- TIMESTAMP(): MatrixOne/Reference/Functions-and-Operators/Datetime/timestamp.md
Expand Down
Loading