SQL生日查询

时间:2013-02-28 11:20:56

标签: mysql

嘿,我有点像SQL的初学者,但是我正在尝试编写一个查询来提取所有记录,如果它在接下来的7天内有人生日,并且看了其他线程的答案,但我有麻烦使他们适应我的设置。

    SELECT *
    FROM `QG04c`
    WHERE month( `dob` ) = month( now( ) )
    AND day( `dob` )
    BETWEEN day( now( ) )
    AND day( now( ) ) +7
    AND `Primary Unit?` =1

目前,这将拉出所有生日都在7天之内的人,但我认为它不会应对月末情景和年终等。

3 个答案:

答案 0 :(得分:2)

假设这是MySQL,您可以使用DAYOFYEAR函数来获取生日发生的一年中的某一天。简单的场景是从1月1日到12月25日,即同一天提前7天。为此,您可以使用:

SELECT  *
FROM    `QG04c`
WHERE   DAYOFYEAR(DOB) - DAYOFYEAR(CURDATE()) BETWEEN 0 AND 7;

然而,今天是在12月25日至12月31日期间,您需要在1月1日至6日之间说明生日。要做到这一点,您需要:

SELECT  *
FROM    `QG04c`
WHERE   DAYOFYEAR(CURDATE() + INTERVAL 7 DAY) < 7
AND     DAYOFYEAR(DOB) < DAYOFYEAR(CURDATE() + INTERVAL 7 DAY);

然后只是将两种情况结合起来的问题:

SELECT  *
FROM    `QG04c`
WHERE   DAYOFYEAR(DOB) - DAYOFYEAR(CURDATE()) BETWEEN 0 AND 7
OR  (   DAYOFYEAR(CURDATE() + INTERVAL 7 DAY) < 7
    AND DAYOFYEAR(DOB) < DAYOFYEAR(CURDATE() + INTERVAL 7 DAY)
    );

<强> Examples on SQL Fiddle

答案 1 :(得分:0)

select * from tablename WHERE [ColumnName] BETWEEN DATEADD(DAY, +7, @YourDate) AND @YourDate and Primary Unit = 1 (If you have and condition put add here)

谢谢。

答案 2 :(得分:0)

如果你不分解那一天应该很容易吗?

WHERE `dob` BETWEEN now() AND now() +7