Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql STR_TO_DATE返回两位数年份的未来日期_Mysql_Sql_Date_Datetime - Fatal编程技术网

Mysql STR_TO_DATE返回两位数年份的未来日期

Mysql STR_TO_DATE返回两位数年份的未来日期,mysql,sql,date,datetime,Mysql,Sql,Date,Datetime,我有一个SQL表,日期格式为12/9/66(英国日期格式,dd/mm/yy)。当我使用: UPDATE players SET dateOfBirth = STR_TO_DATE('12/9/66','%d/%m/%y') 它将日期设置为2066-09-12 显然,我希望它是1966-09-12。如何获得正确的日期?您可以检查STR\u TO\u date是否导致未来日期(),然后减去100年: UPDATE players SET dateOfBirth = STR_TO_DATE('12/

我有一个SQL表,日期格式为
12/9/66
(英国日期格式,dd/mm/yy)。当我使用:

UPDATE players SET dateOfBirth = STR_TO_DATE('12/9/66','%d/%m/%y')
它将日期设置为2066-09-12


显然,我希望它是
1966-09-12
。如何获得正确的日期?

您可以检查STR\u TO\u date是否导致未来日期(),然后减去100年:

UPDATE players
SET dateOfBirth = STR_TO_DATE('12/9/66','%d/%m/%y') - INTERVAL (
    CASE WHEN STR_TO_DATE('12/9/66','%d/%m/%y') <= CURRENT_DATE THEN 0 ELSE 100 END
) YEAR
更新播放器
将dateOfBirth=STR_设置为日期('12/9/66','%d/%m/%y')-间隔(

截止日期('12/9/66','%d/%m/%y'时的情况)它怎么知道你指的是1966年而不是2066年?顺便问一下,日期是从哪里来的?现在修改列类型是否太晚了?我不知道原因,但这里有很多关于以纯文本形式存储的日期的问题。这很有趣,因为人们似乎花了很多时间试图解决自己造成的问题你看,这个日期格式可以有不同的解释……也许你应该考虑改变表中的格式,如果可能的话。(当被要求将两位数的年份转换为四位数的年份时,MySQL应用了一个截止值。“70”和“99”之间的任何值都被解释为20世纪的日期(
1970
),其余的被解释为21世纪的日期(
2066
)。@O.Jones是的,我在文档中找不到这种行为,感谢您的指点。