Мне было задано задание для создания новой таблицы в базе данных с правильным типом данных. Здесь приведены примеры записей:STR_TO_DATE() возвращает недопустимую дату
RegisteredMonthYear
------------------------
May 2011
March 1998
January 2000
Перед тем как вставит преобразованное значение, когда я пытался преобразовать его с помощью STR_TO_DATE()
, чтобы проверить, если значения являются правильными, и результат был именно я не хочу. Это мой запрос:
SELECT RegisteredMonthYear,
STR_TO_DATE(RegisteredMonthYear, '%M %Y') NewDate,
STR_TO_DATE(CONCAT(RegisteredMonthYear, ' 01'), '%M %Y %d') newDate2,
STR_TO_DATE(RegisteredMonthYear, '%M %Y') + INTERVAL 1 DAY newDate3
FROM TableName
+---------------------+---------------------------------+--------------------------------+----------+
| REGISTEREDMONTHYEAR | NEWDATE | NEWDATE2 | NEWDATE3 |
+---------------------+---------------------------------+--------------------------------+----------+
| May 2011 | April, 30 2011 00:00:00+0000 | May, 01 2011 00:00:00+0000 | (null) |
| March 1998 | February, 28 1998 00:00:00+0000 | March, 01 1998 00:00:00+0000 | (null) |
| January 2000 | December, 31 1999 00:00:00+0000 | January, 01 2000 00:00:00+0000 | (null) |
+---------------------+---------------------------------+--------------------------------+----------+
смотрите здесь демо: http://www.sqlfiddle.com/#!2/89a67/7
Как вы можете видеть, колонка NEWDATE
один день позади. Почему результат такой?
Когда я попытался совместить 01
в строке в столбце NEWDATE2
, результат будет таким, как ожидалось. Возвращаясь к столбцу NEWDATE
, я попытался добавить один день, думая, что он даст точное значение в столбце NEWDATE3
, но результат NULL
.
Есть идеи по этому вопросу?
как я просматривать документацию, она говорит: 'STR_TO_DATE() возвращает значение DATETIME, если строка формата содержит как дату, так и время ... 'почему вы все еще передаете результат' STR_TO_DATE() 'в' DATE() '? Я предполагаю, что это ошибка для 'STR_TO_DATE()'. –
Вот почему я сказал, что это еще один MySQL. Часто вам нужно применять черную магию для решения проблем, которые не должны существовать на первом месте. – mvp
Я думаю, это тоже ошибка. –