我有以下查询:
SELECT COUNT(id) FROM users WHERE
DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), birthday)), "%Y") >17 AND
DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), birthday)), "%Y") <22
应该返回18到21岁之间的人数,确实如此。问题是我不喜欢我两次运行相同的功能集。我该如何避免?
答案 0 :(得分:3)
MySQL中有一个名为BETWEEN
的神奇运算符。观察:
SELECT COUNT(`id`) FROM `users`
WHERE DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(),`birthday`)),"%Y")
BETWEEN 18 and 21;
请注意,要使用的值是包含的,而不是独占的。
另请注意,您可以更简单地执行此操作:
WHERE DATE_ADD(`birthday`,INTERVAL 18 YEAR)
BETWEEN NOW() AND DATE_ADD(NOW(),INTERVAL 3 YEAR)
答案 1 :(得分:0)
在这种特定情况下,您可以使用BETWEEN
运算符,但也可以使用子查询来处理更常见的情况。
SELECT COUNT(id)
FROM users
WHERE DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), birthday)), "%Y") BETWEEN 18 and 21;
子查询版本:
SELECT COUNT(id)
FROM (
SELECT
id,
DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), birthday)), "%Y") days_from_birthday
FROM users
) as sub