0

嘿,我是 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 天内的人都排除在外,但我认为它无法应对月末情景和年终等情况。

4

3 回答 3

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)
    );

SQL Fiddle 上的示例

于 2013-02-28T12:31:17.330 回答
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)

谢谢 。

于 2013-02-28T11:27:54.820 回答
0

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

WHERE `dob` BETWEEN now() AND now() +7
于 2013-02-28T11:28:02.573 回答