MySQL : STR_TO_DATE 函数在格式正确的输出上给出 null
MySQL : STR_TO_DATE function giving null on correct output with format
我正在尝试将字符串转换为 mysql
中的日期。尽管给出了正确的字符串和格式说明符,mysql
给出了 NULL
输出,警告消息为 Incorrect datetime value: 'XXXXX' for function str_to_date
,尽管它适用于完整的日期字符串。
mysql 日志
mysql> SELECT STR_TO_DATE('2018/06', '%Y/%m');
+---------------------------------+
| STR_TO_DATE('2018/06', '%Y/%m') |
+---------------------------------+
| NULL |
+---------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> SELECT STR_TO_DATE('2018/06/01', '%Y/%m/%d'); +---------------------------------------+
| STR_TO_DATE('2018/06/01', '%Y/%m/%d') |
+---------------------------------------+
| 2018-06-01 |
+---------------------------------------+
1 row in set (0.00 sec)
调试信息
MySQL 版本 - 5.7.21 MySQL Community Server (GPL)
mysql> show warnings;
+---------+------+--------------------------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------------------------+
| Warning | 1411 | Incorrect datetime value: '2018/06' for function str_to_date |
+---------+------+--------------------------------------------------------------+
1 row in set (0.00 sec)
要求
我想从上面的日期字符串中解析月份和年份。
为了满足我的要求,我使用了以下解决方法 -
mysql> SELECT YEAR(STR_TO_DATE(CONCAT('2018/06', '/01'), '%Y/%m/%d'));
+---------------------------------------------------------+
| YEAR(STR_TO_DATE(CONCAT('2018/06', '/01'), '%Y/%m/%d')) |
+---------------------------------------------------------+
| 2018 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT MONTH(STR_TO_DATE(CONCAT('2018/06', '/01'), '%Y/%m/%d'));
+----------------------------------------------------------+
| MONTH(STR_TO_DATE(CONCAT('2018/06', '/01'), '%Y/%m/%d')) |
+----------------------------------------------------------+
| 6 |
+----------------------------------------------------------+
1 row in set (0.00 sec)
您可以在mysql
中使用DATE_FORMAT函数
SELECT DATE_FORMAT('2018/06/01', '%Y-%m')
注意:日期字符串应采用任何有效的 MYSQL 日期格式(年月日)
如果您的日期字符串始终采用 'yyyy/mm' 格式
您可以在 MYSQL.
中使用子字符串或 substring_index 函数,而不是使用日期函数
select substring("2018/06",1,4) AS year, substring("2018/06",6,2) as month
或
select substring_index("2018/06","/",1) AS year, substring_index("2018/06","/",-1) as month
我正在尝试将字符串转换为 mysql
中的日期。尽管给出了正确的字符串和格式说明符,mysql
给出了 NULL
输出,警告消息为 Incorrect datetime value: 'XXXXX' for function str_to_date
,尽管它适用于完整的日期字符串。
mysql 日志
mysql> SELECT STR_TO_DATE('2018/06', '%Y/%m');
+---------------------------------+
| STR_TO_DATE('2018/06', '%Y/%m') |
+---------------------------------+
| NULL |
+---------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> SELECT STR_TO_DATE('2018/06/01', '%Y/%m/%d'); +---------------------------------------+
| STR_TO_DATE('2018/06/01', '%Y/%m/%d') |
+---------------------------------------+
| 2018-06-01 |
+---------------------------------------+
1 row in set (0.00 sec)
调试信息
MySQL 版本 - 5.7.21 MySQL Community Server (GPL)
mysql> show warnings;
+---------+------+--------------------------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------------------------+
| Warning | 1411 | Incorrect datetime value: '2018/06' for function str_to_date |
+---------+------+--------------------------------------------------------------+
1 row in set (0.00 sec)
要求
我想从上面的日期字符串中解析月份和年份。
为了满足我的要求,我使用了以下解决方法 -
mysql> SELECT YEAR(STR_TO_DATE(CONCAT('2018/06', '/01'), '%Y/%m/%d'));
+---------------------------------------------------------+
| YEAR(STR_TO_DATE(CONCAT('2018/06', '/01'), '%Y/%m/%d')) |
+---------------------------------------------------------+
| 2018 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT MONTH(STR_TO_DATE(CONCAT('2018/06', '/01'), '%Y/%m/%d'));
+----------------------------------------------------------+
| MONTH(STR_TO_DATE(CONCAT('2018/06', '/01'), '%Y/%m/%d')) |
+----------------------------------------------------------+
| 6 |
+----------------------------------------------------------+
1 row in set (0.00 sec)
您可以在mysql
中使用DATE_FORMAT函数SELECT DATE_FORMAT('2018/06/01', '%Y-%m')
注意:日期字符串应采用任何有效的 MYSQL 日期格式(年月日)
如果您的日期字符串始终采用 'yyyy/mm' 格式
您可以在 MYSQL.
中使用子字符串或 substring_index 函数,而不是使用日期函数 select substring("2018/06",1,4) AS year, substring("2018/06",6,2) as month
或
select substring_index("2018/06","/",1) AS year, substring_index("2018/06","/",-1) as month