我已经使用以下内容一段时间以避免DATEDIFF
未考虑闰年这一事实。
"select
year(now())
- year(`birthdate`)
- (date_format(now(), '%m%d') < date_format(`birthdate`, '%m%d');"
但我从来没有真正理解它是如何工作的,尤其是<
运算符在这里做了什么?
答案 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