Использование STR_TO_DATE со вставкой - PullRequest
1 голос
/ 20 апреля 2020

В моей базе данных есть тестовая таблица со следующей структурой: id (PK, Auto_Increment), dataI (datetime), dataF (datetime).

Использование MySQL Workbench, когда я пытаюсь вставить запись, у меня возникают проблемы. Я пытался разными способами использовать str_to_date, чтобы исправить это.

INSERT INTO test(dataI, dataF) 
VALUES(STR_TO_DATE('2020-01-10 18:00:00', '%YYYY-%MM-%DD hh:mm:ss'), STR_TO_DATE('2020-01-10 24:00:00', '%YYYY-%MM-%DD hh:mm:ss'))

Код ошибки 1411: неверное значение даты и времени для функции str_to_date

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

'24:00:00' - это , а не действительный компонент времени для литерала DATETIME.


Спецификация формата должна соответствовать строке. Список допустимых спецификаторов задокументирован в функции DATE_FORMAT, на которую ссылается документация для функции STR_TO_DATE на той же странице.

Ссылка:

https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date -формат

Формат этого первого значения может быть указан как '%Y-%m-%d %h %H:%i:%s'

или более кратко, как '%Y-%m-%d %T'

Нам не нужно использовать функцию STR_TO_DATE, когда литералы даты поставляются в формате по умолчанию; MySQL выполнит преобразование в DATETIME неявно.


Мы могли бы сделать это:

... VALUES ('2020-01-10 18:00:00','2020-01-11 00:00:00')

Или, если мы хотим использовать STR_TO_DATE, мы указываем формат которая соответствует нашей строке

... VALUES( STR_TO_DATE('2020-01-10 18:00:00','%Y-%m-%d %T')
          , STR_TO_DATE('2020-01-11 00:00:00','%Y-%m-%d %T')
          )
                                              ^^^^^^^^^^^^                                       
0 голосов
/ 20 апреля 2020

Ваши строки формата неверны. Например, %YYYY должно быть просто %Y; %YYYY означает 4-х git год, за которым следует буквальная строка YYY.

Формат строки должен быть %Y-%m-%d %H:%i:%s.

См. Полный список директив формата здесь .

...