我在表格(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)
您也可以使用CAST('2013-09-05T10:10:02Z' AS DATETIME)
which 不需要格式定义,如STR_TO_DATE()
.
如果您想处理时区,只需使用此查询,并使用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 方法,但会得到评论中描述的截断错误。
您还可以使用 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