SQL STR_TO_DATE

时间:2019-02-24 20:06:37

标签: mysql sql str-to-date error-messaging

我在使用以下代码时遇到麻烦:

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数据类型。

3 个答案:

答案 0 :(得分:1)

我建议使用usual date and time MySQL datatypes中的一种,而不是很少使用的YEAR datatypeDATEDATETIMETIMESTAMP

如果要将字符串转换为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数据类型。您应该将整个日期输入到该列中。