跳到主要内容

STR_TO_DATE

声明

STR_TO_DATE(str, format)

说明

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

  • 如果 strformatNULL,则该函数返回 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。

        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.001 sec)
      • 如果 str 为 INT 类型,并且 0 ≤ str ≤ 69,则返回 NULL,并提示 Warning。

        SELECT STR_TO_DATE(0,'%Y-%b-%D %r');
        +------------------------------+
        | STR_TO_DATE(0,'%Y-%b-%D %r') |
        +------------------------------+
        | NULL |
        +------------------------------+
        1 row in set, 1 warning (0.000 sec)
      • 如果 str 为 INT 类型,并且 69 < str ≤ 99,则返回 NULL,并提示 Warning。

        SELECT STR_TO_DATE(88,'%Y-%b-%D %r');
        +-------------------------------+
        | STR_TO_DATE(88,'%Y-%b-%D %r') |
        +-------------------------------+
        | NULL |
        +-------------------------------+
        1 row in set, 1 warning (0.000 sec)
      • 如果 str 为 INT 类型,并且 100 < str ≤ 9999,则返回 NULL,并提示 Warning。

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

        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.000 sec)
      • 如果 str 为字符串,则会将字符串尽可能转换为日期时间,并返回 1999-11-30 00:00:00str 作为类型的日期时间;如果不能转换为日期时间,则返回 NULL

        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.001 sec)

        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.001 sec)
      • 如果 str 为其他类型,则返回 NULL,并提示 Warning。

        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.001 sec)

        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.001 sec)

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

示例

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.000 sec)