0

我有以下查询:

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 之间的人数,并且确实如此。问题是我不喜欢我两次运行同一组函数的方式。我该如何避免呢?

4

2 回答 2

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)
于 2013-06-03T23:04:04.587 回答
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
于 2013-06-03T23:07:42.557 回答