我在表(varchar)中有一个列,其格式为日期 2013-09-05T10:10:02Z
如何使用更新查询将其转换为日期时间格式并将其保存在其他列中?
答案 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