Я пытаюсь сравнить год, хранящийся как 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.
Я проверил этот пост, но из того, что я мог видеть, я следую правильному форматированию, которое я основывал на документах.
Чтобы проанализировать строку, используя 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)