代码之家  ›  专栏  ›  技术社区  ›  Vivek

mysql:str_to_date函数,在正确的格式输出时给出空值

  •  1
  • Vivek  · 技术社区  · 6 年前

    我正在尝试将字符串转换为 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 回复  |  直到 6 年前
        1
  •  0
  •   Vivek    6 年前

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

    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)
    
        2
  •  0
  •   Praveen S    6 年前

    在MySQL中可以使用日期格式函数

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

    注意:日期字符串应该是任何有效的mysql日期格式(年-月-日)

        3
  •  0
  •   Praveen S    6 年前

    如果日期字符串始终采用“yyyy/mm”格式

    您可以在MySQL中使用substring或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