Я думал, что столкнулся с ошибкой с MySQL 5.1, но ошибка была в Perl-коде, который создает временные метки. Местное время perl использует 0-11 в течение нескольких месяцев, но MySQL datetime использует 1-12. Итак, у меня есть все эти неверные временные метки, которые мне нужно обновить.MySQL - мои месяцы хранятся в актуальном состоянии 0-11
2012-00-19 09:03:30
Это должно быть:
2012-01-19 09:03:30
Проблема заключается в том, что дата функции для MySQL возврата NULL на 00 месяц. Есть ли способ сделать это в MySQL?
EDIT: Решение =
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
OK , Я люблю Perl, но кто думал, что это было просто d идеализировать месяцы с нулевым индексом? –
Вы можете попробовать использовать функцию [dateadd] (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add) в MySQL, чтобы добавить месяц каждая запись. Я не уверен, что произойдет в нулевых случаях; вам нужно попробовать его в командной строке MySQL, чтобы узнать. –
Perl gmtime/localtime по существу берет структуру Unix tm как свой параметр, а struct tm имеет индексы с нулевым индексом. Это довольно печально известный Perl, но это действительно вина Unix. – pndc