SQL STR_TO_DATE

SQL STR_TO_DATE

我在使用以下代码时遇到问题:

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

返回警告:

Incorrect datetime value: '1880' for function str_to_date

time 是 table orig 中的一个 varchar 列,格式为 yyyy/mm.

我想从此 varchar 中提取年份部分并使用 STR_TO_DATE

将其转换为年份数据类型

您可以将 SUBSTRING(time,1,4) 转换为整数:

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

无需先转为日期再转为整数
我猜你需要 return 一个整数值,因为你使用了 YEAR() 函数。
如果不是简单的 SELECT SUBSTRING(time,1,4) FROM orig 就可以了。

我建议使用 usual date and time MySQL datatypes, instead of the rarely used YEAR datatype 之一:DATEDATETIMETIMESTAMP

如果您想将字符串转换为 date 数据类型,则:

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

您可以在这个日期使用 YEAR() 函数,它将 return 一个 integer 值 :

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

最后:如果你想要的只是从存储为字符串的日期中获取年份,那么你可以使用 SUBSTR 直接提取字符串:

SUBSTR(my_column, 1, 4)

这 return 是一个字符串(不是整数),MySQL 在数字上下文中使用时会隐含地转换为数字。

time是什么样子的?如果 year 的数据类型是年份,那么您可以在列中插入一个日期:

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

我不喜欢 year 数据类型。您应该只将整个日期放入列中。