MySQL - текущие месяцы хранятся 0-11 - PullRequest
2 голосов
/ 19 января 2012

Я думал, что столкнулся с ошибкой в ​​MySQL 5.1, но ошибка была в коде perl, который создает временные метки. локальное время в perl использует 0-11 в течение нескольких месяцев, а в datetime в MySQL используется 1-12. Итак, у меня есть все эти искаженные временные метки, которые мне нужно обновить.

2012-00-19 09:03:30

Это должно быть:

2012-01-19 09:03:30

Проблема в том, что функции даты для MySQL возвращают NULL в течение 00 месяцев. Есть ли способ сделать это в 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 Ответ

3 голосов
/ 19 января 2012

Это должно работать:

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)
...