MySQL:STR_TO_DATE函数在格式正确的输出上给出null

时间:2018-07-10 19:38:51

标签: mysql mysql-5.7

我正在尝试将字符串转换为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)

要求

我想从上述日期字符串中解析月份和年份。

3 个答案:

答案 0 :(得分:0)

为了满足我的要求,我正在使用以下解决方法-

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)

答案 1 :(得分:0)

您可以在mysql中使用DATE_FORMAT函数

SELECT DATE_FORMAT('2018/06/01', '%Y-%m')

注意:日期字符串应使用任何有效的MySQL日期格式(年月日)

答案 2 :(得分:0)

如果您的日期字符串始终为“ yyyy / mm”格式

可以使用MYSQL中的substring或substring_index函数代替日期函数。

 select substring("2018/06",1,4) AS year, substring("2018/06",6,2) as month 

OR

select substring_index("2018/06","/",1) AS year, substring_index("2018/06","/",-1) as month