Mysql - 如何从ISO 8601格式转换日期并保存到mysql列?

时间:2013-10-14 09:33:54

标签: mysql datetime

我在表(varchar)中有一个列,其格式为日期 2013-09-05T10:10:02Z

如何使用更新查询将其转换为日期时间格式并将其保存在其他列中?

4 个答案:

答案 0 :(得分:4)

您也可以CAST('2013-09-05T10:10:02Z' AS DATETIME)使用不需要格式定义的STR_TO_DATE()

答案 1 :(得分:3)

您可以使用STR_TO_DATE功能:

UPDATE table1 SET col2 = STR_TO_DATE(col1,'%Y-%m-%dT%TZ')

示例:

mysql> select STR_TO_DATE('2013-09-05T10:10:02Z','%Y-%m-%dT%TZ');
+----------------------------------------------------+
| STR_TO_DATE('2013-09-05T10:10:02Z','%Y-%m-%dT%TZ') |
+----------------------------------------------------+
| 2013-09-05 10:10:02                                |
+----------------------------------------------------+
1 row in set (0.00 sec)

答案 2 :(得分:2)

如果您想要处理时区,只需使用此查询,并使用 mysql时区

mysql> select CONVERT_TZ("2013-09-05T10:10:02Z", "+00:00", @@session.time_zone);

+-------------------------------------------------------------------+
| CONVERT_TZ("2013-09-05T10:10:02Z", "+00:00", @@session.time_zone) |
+-------------------------------------------------------------------+
| 2013-09-05 12:10:02                                               |
+-------------------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

或任何其他时区

mysql> select CONVERT_TZ("2013-09-05T10:10:02Z", "+00:00", "+03:00");
+--------------------------------------------------------+
| CONVERT_TZ("2013-09-05T10:10:02Z", "+00:00", "+03:00") |
+--------------------------------------------------------+
| 2013-09-05 13:10:02                                    |
+--------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

答案 3 :(得分:0)

我尝试从上面使用cast方法,但会收到注释中所述的截断错误。

您还可以使用CAST('2013-09-05T10:10:02Z'AS DATETIME),它不需要STR_TO_DATE()中的格式定义。

我会一直得到:Error: Truncated incorrect datetime value: '2011-10-02T23:25:42Z'

我通过在查询中使用它之前将值强制转换为@变量来修复它。这是存储过程中的一个示例:

CREATE PROCEDURE `new_procedure`(IN p_date VARCHAR(50), p_text VARCHAR(500))
BEGIN

SET @datestring = CAST(p_date AS DATETIME);

-- used for debugging
SELECT @datestring, p_text;

INSERT INTO testtable(timestamp, text) VALUES(@datestring, p_text);

END