MySQL - 我的月份是当前存储的0-11

时间:2012-01-19 18:11:13

标签: mysql perl datetime-format

我以为我遇到了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

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)