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
тип данных. Вы должны просто поставить всю дату в столбце.