SQL STR_TO_DATE

У меня проблемы со следующим кодом:

INSERT into `fun` ( funner)
SELECT YEAR(STR_TO_DATE(SUBSTRING(time,1,4), '%Y')) 
FROM `orig` 

возвращая предупреждение:

Неверное значение даты и времени: "1880" для функции str_to_date

time столбец varchar в таблице orig с форматом yyyy/mm,

Я хочу извлечь раздел год из этого varchar и перевести его в тип данных год, используя STR_TO_DATE

3 ответа

Решение

Я бы порекомендовал использовать один из обычных типов данных MySQL даты и времени вместо редко используемых YEAR тип данных: DATE, DATETIME а также TIMESTAMP,

Если вы хотите превратить вашу строку в date тип данных, то:

STR_TO_DATE(my_column, '%Y/%m')

Вы можете использовать YEAR() функция в эту дату, и он вернет integer значение:

YEAR(STR_TO_DATE(my_column, '%Y/%m'))

Наконец: если все, что вам нужно, это получить год от даты, хранящейся в виде строки, то вы можете напрямую извлечь эту строку, используя SUBSTR:

SUBSTR(my_column, 1, 4)

Это возвращает строку (не целое число), которую MySQL будет неявно преобразовывать в число при использовании в числовом контексте.

Вы можете конвертировать SUBSTRING(time,1,4) целое число:

SELECT CONVERT(SUBSTRING(time,1,4),UNSIGNED INTEGER) FROM orig 

нет необходимости сначала преобразовывать его в дату, а затем преобразовывать в целое число.
Я думаю, вам нужно вернуть целочисленное значение, так как вы используете функцию YEAR().
Если не простой SELECT SUBSTRING(time,1,4) FROM orig Сделаю.

Что значит time выглядит как? Если year имеет тип данных year, тогда вы можете вставить дату в столбец:

INSERT into `clean` (year)
    SELECT DATE(CONCAT(SUBSTRING(time, 1, 4), '-01-01')) 
    FROM `orig` ;

Я не фанат year тип данных. Вы должны просто поставить всю дату в столбце.

Другие вопросы по тегам