我在使用以下代码时遇到问题:
INSERT into `fun` ( funner)
SELECT YEAR(STR_TO_DATE(SUBSTRING(time,1,4), '%Y'))
FROM `orig`
返回警告:
日期时间值不正确:函数 str_to_date 的“1880”
time
是表格中的一个 varchar 列,orig
格式为yyyy/mm
.
我想从此 varchar 中提取年份部分并将其转换为年份数据类型STR_TO_DATE
我在使用以下代码时遇到问题:
INSERT into `fun` ( funner)
SELECT YEAR(STR_TO_DATE(SUBSTRING(time,1,4), '%Y'))
FROM `orig`
返回警告:
日期时间值不正确:函数 str_to_date 的“1880”
time
是表格中的一个 varchar 列,orig
格式为yyyy/mm
.
我想从此 varchar 中提取年份部分并将其转换为年份数据类型STR_TO_DATE
我会推荐使用一种常用的日期和时间 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
数据类型的粉丝。您应该将整个日期放入列中。