SQL STR_TO_DATE - PullRequest
       82

SQL STR_TO_DATE

0 голосов
/ 24 февраля 2019

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

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 ]

0 голосов
/ 24 февраля 2019

Я бы рекомендовал использовать один из обычных типов данных 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 будет неявно преобразовывать в число при использовании в числовом контексте.

0 голосов
/ 24 февраля 2019

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

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

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

0 голосов
/ 24 февраля 2019

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

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

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

...