我已经使用以下一段时间来避免 DATEDIFF
的事实不考虑闰年。
"select
year(now())
- year(`birthdate`)
- (date_format(now(), '%m%d') < date_format(`birthdate`, '%m%d');"
但我从来没有真正理解它是如何工作的,特别是 <
是什么?运营商在这里做什么?
最佳答案
<
是比较运算符。
所以最后一行被评估为 bool 表达式。左边的表达式正在与右边的表达式进行比较,比较返回 NULL、0 或 1。(MySQL 返回 1 表示 TRUE,0 表示 FALSE。)
最后一行的净效果是减去 "0"
或 "1"
(如果生日不为空。)
要查看实际效果,请尝试运行此查询:
SELECT '0501' < '1031' AS foo
bool 表达式的结果可以在另一个表达式中引用,例如:
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
关于mysql 以年表示的日期之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23417445/