我以为我遇到了MySQL 5.1的错误,但是这个错误出现在创建时间戳的perl代码中。 perl的localtime使用0-11个月,但MySQL的datetime使用1-12。所以,我已经得到了我需要更新的所有这些格式错误的时间戳。
2012-00-19 09:03:30
这应该是:
2012-01-19 09:03:30
问题是MySQL的日期函数在00个月内返回NULL。有没有办法在MySQL中做到这一点?
编辑:解决方案=
UPDATE test_stats
SET start_time = CAST(CONCAT(SUBSTRING(start_time, 1, 5),
CAST((CAST(SUBSTRING(start_time, 6, 2) AS UNSIGNED) + 1) AS CHAR(2)),
SUBSTRING(start_time, 8, 12)) AS DATETIME);
顺便说一句,我使用的是MySQL 5.1
答案 0 :(得分:3)
这应该有效:
UPDATE MyTable
SET DateTimeField =
CAST (
SUBSTRING(DateTimeString, 1, 5) -- '2012-'
+ CAST((CAST(SUBSTRING(DateTimeString, 6, 2) AS INT) + 1) AS VARCHAR) -- '00' => '1'
+ SUBSTRING(DateTimeString, 8, 12) -- '-19 09:03:30'
AS DATETIME)
使用此选择进行测试
DECLARE @x VARCHAR(50) = '2012-00-19 09:03:30'
SELECT CAST(SUBSTRING(@x, 1, 5)
+ CAST((CAST(SUBSTRING(@x, 6, 2) AS INT) + 1) AS VARCHAR)
+ SUBSTRING(@x, 8, 12) AS DATETIME)