mysql 以年表示的日期之间的差异

标签 mysql date

我已经使用以下一段时间来避免 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/

相关文章:

mySQL:如何在一张表中为每个 id_country 选择 3 个随机城市

mysql - 无法在 xampp 版本 1.8.3 上启动 mysql

mongodb - 在mongo查询中将iso日期转换为时间戳

PHP-预匹配?

sql - 检查输入日期是否在开始和结束日期表内

php - 在 Laravel 中搜索列名以获取行

MySQL 未返回有效的 Json

mysql - Mysql根据月份和日期搜索数据

php - 我的数据库中保存了奇怪的字符

php - 将字符串转换为 UNIX 时间戳