我以为我遇到了 MySQL 5.1 的错误,但该错误出现在创建时间戳的 Perl 代码中。 Perl 的本地时间使用 0-11 表示月份,但 MySQL 的日期时间使用 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
最佳答案
这应该有效:
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)
关于MySQL - 我的月份当前存储为 0-11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8931106/