改进查询以选择从现在起x天内(未来和过去)的(出生)日期

时间:2012-03-22 09:12:47

标签: mysql date

我有一个包含字段birthday(日期)的用户表。

目前,我选择的用户生日是在当前日期之前或之后的7天内,如下所示:

SELECT * FROM users
WHERE 
    DATE_FORMAT(birthday, '1980-%m-%d')
        BETWEEN
        DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 7 day), '1980-%m-%d')
        AND
        DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL 7 day), '1980-%m-%d')

正如您所看到的,考虑到通过制作的1980年日期格式进行比较,此查询不是最简化的。此外,我认为这将无法在一年的最后一周和第一周正确选择生日用户。

虽然我看到了这个问题,但我很难找到如何解决这个问题。我该怎么做才能改进这个查询?

2 个答案:

答案 0 :(得分:3)

试试这个过滤器 -

WHERE
  birthday + INTERVAL EXTRACT(YEAR FROM NOW()) - EXTRACT(YEAR FROM birthday) YEAR
  BETWEEN CURRENT_DATE() - INTERVAL 7 DAY AND CURRENT_DATE() + INTERVAL 7 DAY

答案 1 :(得分:1)

$int_range = 7;

$int_start = strtotime("today -{$int_range} Days")
$arr_days = array();
for($i = 1; $i <= ($int_range * 2); $i++)
    $arr_days[] = "'".date('m-d', strtotime("+{$i} Days", $int_start))."'";

$str_days = implode(', ', $arr_days);

mysql_query("
SELECT * FROM users
WHERE DATE_FORMAT(birthday, '%m-%d') IN ({$str_days})
");