相关文章推荐
睡不着的跑步鞋  ·  4.1K ...·  9 月前    · 
迷茫的仙人掌  ·  Qt Style ...·  1 年前    · 

声明

STR_TO_DATE(str, format)

说明

使用 format str 转换为 DATETIME 值、 DATE 值或 TIME 值。返回值类型取决于 format 包含日期时间的哪些部分。

  • 如果 str format NULL ,则该函数返回 NULL

  • 如果 str 非有效的日期格式,则返回值会根据 sql_mode 的设置有所不同:

    • sql_mode 包含了 NO_ZERO_IN_DATE :返回 NULL

    • sql_mode 不包含 NO_ZERO_IN_DATE

      • 如果 str 为 INT 类型,并且 str < 0,则返回 0000-00-00 00:00:00 ,并提示 Warning。

        obclient> SELECT STR_TO_DATE(-100,'%Y-%b-%D %r');
        +---------------------------------+
        | STR_TO_DATE(-100,'%Y-%b-%D %r') |
        +---------------------------------+
        | 0000-00-00 00:00:00             |
        +---------------------------------+
        1 row in set, 1 warning (0.00 sec)
      • 如果 str 为 INT 类型,并且 0 ≤ str ≤ 69,则返回 1999-11-30 00:00:00 str 的年份;

        obclient> SELECT STR_TO_DATE(0,'%Y-%b-%D %r');
        +------------------------------+
        | STR_TO_DATE(0,'%Y-%b-%D %r') |
        +------------------------------+
        | 1999-11-30 00:00:00          |
        +------------------------------+
        1 row in set (0.00 sec)
      • 如果 str 为 INT 类型,并且 69 < str ≤ 99,则返回 1969-11-30 00:00:00 str - 70 的年份。

        obclient> SELECT STR_TO_DATE(88,'%Y-%b-%D %r');
        +-------------------------------+
        | STR_TO_DATE(88,'%Y-%b-%D %r') |
        +-------------------------------+
        | 1987-11-30 00:00:00           |
        +-------------------------------+
        1 row in set (0.00 sec)
      • 如果 str 为 INT 类型,并且 100 < str ≤ 9999,则返回 0099-11-30 00:00:00 str - 100 的年份。

        obclient> SELECT STR_TO_DATE(2088,'%Y-%b-%D %r');
        +---------------------------------+
        | STR_TO_DATE(2088,'%Y-%b-%D %r') |
        +---------------------------------+
        | 2087-11-30 00:00:00             |
        +---------------------------------+
        1 row in set (0.00 sec)
      • 如果 str 为 INT 类型,并且 str > 10000,则返回 NULL ,并提示 Warning。

        obclient> SELECT STR_TO_DATE(10001,'%Y-%b-%D %r');
        +----------------------------------+
        | STR_TO_DATE(10001,'%Y-%b-%D %r') |
        +----------------------------------+
        | NULL                             |
        +----------------------------------+
        1 row in set, 1 warning (0.00 sec)
      • 如果 str 为字符串,则会将字符串尽可能转换为日期时间,并返回 1999-11-30 00:00:00 加 str 作为类型的日期时间;如果不能转换为日期时间,则返回 NULL

        obclient> SELECT STR_TO_DATE('a2014-Jan-1st 5:5:5 pm', '%Y-%b-%D %r');
        +------------------------------------------------------+
        | STR_TO_DATE('a2014-Jan-1st 5:5:5 pm', '%Y-%b-%D %r') |
        +------------------------------------------------------+
        | NULL                                                 |
        +------------------------------------------------------+
        1 row in set, 1 warning (0.00 sec)
        obclient> SELECT STR_TO_DATE('a2014-Jan-1st 5:5:5 pm', 'a%Y-%b-%D %r');
        +-------------------------------------------------------+
        | STR_TO_DATE('a2014-Jan-1st 5:5:5 pm', 'a%Y-%b-%D %r') |
        +-------------------------------------------------------+
        | 2014-01-01 05:05:05                                   |
        +-------------------------------------------------------+
        1 row in set (0.01 sec)
      • 如果 str 为其他类型,则返回 NULL ,并提示 Warning。

        obclient> SELECT STR_TO_DATE(1.6,'%Y-%b-%D %r');
        +--------------------------------+
        | STR_TO_DATE(1.6,'%Y-%b-%D %r') |
        +--------------------------------+
        | NULL                           |
        +--------------------------------+
        1 row in set, 1 warning (0.00 sec)
        obclient> SELECT STR_TO_DATE(pi(),'%Y-%b-%D %r');
        +---------------------------------+
        | STR_TO_DATE(pi(),'%Y-%b-%D %r') |
        +---------------------------------+
        | NULL                            |
        +---------------------------------+
        1 row in set, 1 warning (0.01 sec)

有关 format 支持的格式,请参见 DATE_FORMAT

示例

obclient> SELECT STR_TO_DATE('2014-Jan-1st 5:5:5 pm', '%Y-%b-%D %r');
+-----------------------------------------------------+
| STR_TO_DATE('2014-Jan-1st 5:5:5 pm', '%Y-%b-%D %r') |
+-----------------------------------------------------+
| 2014-01-01 05:05:05                                 |
+-----------------------------------------------------+
1 row in set (0.01 sec)