Преобразование CHAR в дату в mysql

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

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

Большинство, если не все данные в таблице Elite_years представляют собой год из четырех символов (например, «2008»). Я также не могу изменить типы данных в таблице. Я использую набор данных Yelp для справки.

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


person Brendan O'Sullivan    schedule 04.04.2018    source источник
comment
Сделать наоборот? преобразовать char в int и сравнить с YEAR(dt_fld)   -  person Alex K.    schedule 04.04.2018
comment
Спасибо, это сработало, но вы не знаете, почему мой предыдущий метод не работал?   -  person Brendan O'Sullivan    schedule 04.04.2018
comment
Я с подозрением отношусь к этим обратным кавычкам вокруг %Y   -  person Jerry    schedule 04.04.2018
comment
Я попробовал это с ' , ` и . Только обратная кавычка возвращает ошибку, а два других возвращают NULL. Я неправильно набрал здесь, у меня была только одна кавычка в моем коде   -  person Brendan O'Sullivan    schedule 04.04.2018
comment
ГОД(год) как год   -  person Roy Bogado    schedule 04.04.2018
comment
@ Рой, я уже нашел альтернативное решение благодаря Алексу К., я просто ищу рациональное объяснение, почему оно будет возвращать NULL.   -  person Brendan O'Sullivan    schedule 04.04.2018
comment
@ivan_pozdeev, нет. Этот вопрос требует существования функции str_to_date, которую я использую. Мой вопрос заключается в том, чтобы понять, почему функция может возвращать NULL, когда я следую правильному формату (но, вероятно, не так).   -  person Brendan O'Sullivan    schedule 04.04.2018


Ответы (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)
person Community    schedule 04.04.2018