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

0

Я пытаюсь сравнить год, хранящийся как 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
    Сделать это наоборот? преобразовать char в int и сравнить с YEAR (dt_fld)
  • 0
    Спасибо, это сработало, но у вас есть идея, почему мой предыдущий метод не работал?
Показать ещё 6 комментариев
Теги:

1 ответ

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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню