【发布时间】:2013-10-21 20:15:56
【问题描述】:
我在表 (varchar) 中有一个列,其中日期采用这种格式 2013-09-05T10:10:02Z
如何使用更新查询将其转换为日期时间格式并将其保存在另一列中?
【问题讨论】:
我在表 (varchar) 中有一个列,其中日期采用这种格式 2013-09-05T10:10:02Z
如何使用更新查询将其转换为日期时间格式并将其保存在另一列中?
【问题讨论】:
你可以使用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)
【讨论】:
%f,因此格式是 '%Y-%m-%dT%T.%fZ'。供参考:dev.mysql.com/doc/refman/8.0/en/…
您也可以使用CAST('2013-09-05T10:10:02Z' AS DATETIME),它不需要像STR_TO_DATE() 中的格式定义。
【讨论】:
Error: Truncated incorrect datetime value: '2011-10-02T23:25:42Z'.
CAST() 得到了他们的same 错误Error: Trucated…。我使用的是 mySQL 版本 8.0.20。
如果您想处理时区,只需使用此查询,并使用 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)
【讨论】:
我尝试使用上面的 cast 方法,但会得到 cmets 中描述的截断错误。
您也可以使用 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
【讨论】: