Конвертировать CHAR на сегодняшний день в MySQL

Я пытаюсь сравнить год, сохраненный как CHAR(4), с годом, сохраненным как DATETIME, но каждый раз, когда я пытаюсь преобразовать год CHAR в дату, я всегда получаю NULL, когда ожидаю год в формате 'YYYY'. Я прочитал форматирование для использования str_to_date, но я не уверен, почему он всегда имеет значение null (возможно, я что-то неправильно прочитал). Должна ли строка / формат в функции str_to_date быть полными датами, а не просто форматом года?

SELECT id, STR_TO_DATE(year, '%Y') AS Year
FROM elite_years
LIMIT 100;

Большинство, если не все данные в таблице elite_years - это год из четырех символов (например, "2008"). Я не могу изменить типы данных в таблице. Я использую Yelp Dataset Fyi.

Я проверил этот пост, но из того, что я мог видеть, я следую правильному форматированию, которое я основал на документах.

1 ответ

Решение

Разобрать строку используя STR_TO_DATE(), в строке должно быть достаточно информации, чтобы однозначно идентифицировать дату. Одного года недостаточно - вам все еще нужен месяц и день, в той или иной форме.

На это намекает предупреждение, которое вы получаете при попытке:

mysql> SELECT STR_TO_DATE('2009', '%Y') \G
*************************** 1. row ***************************
str_to_date('2009', '%Y'): NULL
1 row in set, 1 warning (0.00 sec)

mysql> SHOW WARNINGS \G
*************************** 1. row ***************************
  Level: Warning
   Code: 1411
Message: Incorrect datetime value: '2009' for function str_to_date
1 row in set (0.00 sec)
Другие вопросы по тегам