MySQL'%y'计算错误的世纪

时间:2014-01-27 17:24:20

标签: mysql date

我在其中一个数据库中为生日做了一个字符串到日期计算。这些年份是2位数格式,所以很明显这是我的代码:

STR_TO_DATE(dob,'%m/%d/%y')

然而,这是在许多记录上计算不正确的世纪。 IE:出生年份应该是1960年,而不是2060年。

这是基于日期格式的某种SQL标准,还是我可以手动指定一个世纪的截止值?还是其他建议?

编辑: 生日的例子是'09 / 23/62'。

返回格式为'2062-09-23'

3 个答案:

答案 0 :(得分:3)

根据MySQL docs

  • 00-69范围内的年份值将转换为2000-2069。
  • 70-99范围内的年份值转换为1970-1999。

没有对错:因为你没有提供一个世纪,MySQL必须猜测。如果猜测不是你想要的,你将不得不提供你自己的世纪。可能的解决方案取决于您的数据库架构。

答案 1 :(得分:0)

作为mysql documentation,这是预期的行为

  

作为“0”到“99”范围内的1位或2位数字符串。价值观   范围'0'到'69'和'70'到'99'被转换为YEAR值   2000至2069年和1970年至1999年的范围。

答案 2 :(得分:0)

感谢大家的回复。这是我最终使用的解决方法:

IF(STR_TO_DATE(dob,'%m/%d/%y') > NOW(),SUBDATE(STR_TO_DATE(dob,'%m/%d/%y'), INTERVAL 100 YEAR)