mysql以年为单位表示的日期差异

时间:2014-05-01 22:05:19

标签: mysql date

我已经使用以下内容一段时间以避免DATEDIFF未考虑闰年这一事实。

"select 
  year(now()) 
  - year(`birthdate`) 
  - (date_format(now(), '%m%d') < date_format(`birthdate`, '%m%d');"

但我从来没有真正理解它是如何工作的,尤其是<运算符在这里做了什么?

2 个答案:

答案 0 :(得分:2)

<是比较运算符。

这样最后一行被评估为布尔表达式。左边的表达式与右边的表达式进行比较,比较返回NULL,0或1.(MySQL返回1表示TRUE,0表示FALSE。)

最后一行的净效果是减去"0""1"(如果生日数不为空。)

要查看此操作,请尝试运行此查询:

SELECT '0501' < '1031' AS foo

布尔表达式的结果可以在另一个表达式中引用,例如:

SELECT 24 - ( '0501' < '1031' ) AS foo

如果birthdate非空,则表达式为:

(date_format(now(),'%m%d') < date_format(`birthdate`,'%m%d')

相当于:

IF((date_format(now(),'%m%d') < date_format(`birthdate`,'%m%d'),1,0)

并相当于:

CASE WHEN (date_format(now(),'%m%d') < date_format(`birthdate`,'%m%d')
THEN 1
ELSE 0
END

答案 1 :(得分:0)

最后一个布尔部分(&lt; comparsion)在生日之前/之后询问。 (添加1或0)

尝试:

SELECT 10 - 7 - true = 2

SELECT 10 - 7 - false = 3