我在使用以下代码时遇到麻烦:
INSERT into `fun` ( funner)
SELECT YEAR(STR_TO_DATE(SUBSTRING(time,1,4), '%Y'))
FROM `orig`
返回警告:
日期时间值不正确:函数str_to_date的日期时间为'1880'
time
是表orig
中的varchar列,格式为yyyy/mm
。
我想从此varchar中提取year部分并将其转换为使用STR_TO_DATE
的year数据类型。
答案 0 :(得分:1)
我建议使用usual date and time MySQL datatypes中的一种,而不是很少使用的YEAR
datatype: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会将其隐式转换为数字。
答案 1 :(得分:0)
您可以将SUBSTRING(time,1,4)
转换为整数:
SELECT CONVERT(SUBSTRING(time,1,4),UNSIGNED INTEGER) FROM orig
无需先将其转换为日期,然后再转换为整数。
我猜因为您使用了YEAR()函数,所以您需要返回一个整数值。
如果不是这样,那么简单的SELECT SUBSTRING(time,1,4) FROM orig
就可以。
答案 2 :(得分:0)
time
是什么样的?如果year
的数据类型为year,则可以在该列中插入一个日期:
INSERT into `clean` (year)
SELECT DATE(CONCAT(SUBSTRING(time, 1, 4), '-01-01'))
FROM `orig` ;
我不喜欢year
数据类型。您应该将整个日期输入到该列中。