0

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

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

4

3 回答 3

1

我会推荐使用一种常用的日期和时间 MySQL 数据类型,而不是很少使用的YEAR数据类型:DATE和.DATETIMETIMESTAMP

如果要将字符串转换为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 将隐式转换为数字。

于 2019-02-24T20:12:25.253 回答
0

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

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

无需先将其转换为日期,然后再转换为整数。
我猜你需要返回一个整数值,因为你使用 YEAR() 函数。
如果不是简单的SELECT SUBSTRING(time,1,4) FROM orig就行。

于 2019-02-24T20:11:30.510 回答
0

time看起来像什么?如果year数据类型为 year,则可以在列中插入日期:

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

我不是year数据类型的粉丝。您应该将整个日期放入列中。

于 2019-02-24T20:27:33.093 回答