12

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

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

4

4 回答 4

15

您可以使用以下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)
于 2013-10-14T09:43:40.913 回答
9

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

于 2017-04-04T20:08:57.913 回答
3

如果您想处理时区,只需使用此查询,并使用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)
于 2017-11-03T12:32:27.190 回答
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
于 2020-01-25T18:13:48.463 回答