2013-02-28 5 views
-1

Эй, я немного начинаю с SQL, но я пытаюсь написать запрос, чтобы вытащить все записи, если его день рождения в ближайшие 7 дней, и посмотрел на другие темы с ответами, но я «Мне трудно адаптировать их к моей настройке.SQL Birthday Query

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

На данный момент это вытаскивает каждый, день рождения которого в течение 7 дней, но я не думаю, что он справится с концом сценариев месяца и в конце года и т.д.

+1

какая база данных вы используете? – beny23

+1

Какие РСУБД? SQL Server? MySQL? Oracle? – Curt

+0

Кажется, что MySQL основан на обратных выводах, но надеюсь, что OP подтверждает – Sparky

ответ

2

Предполагая, что это MySQL, вы можете использовать функцию DAYOFYEAR, чтобы получить день года, когда возник день рождения. Простой сценарий - это все с 1 января по 25 декабря, где 7 дней вперед в том же году. Для этого вы можете использовать:

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

Однако, когда сегодня от 25 декабря - 31 декабря вам необходимо учитывать для рождения составляет от 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

+0

отлично, спасибо –

+0

Помните, что високосные годы могут изменить день года! – althaus

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) 

Спасибо.

+0

глупый вопрос, но что я должен положить в часть @YourDate? –

+0

hi MatthewShine, @yourdate означает, что вам нужно преобразовать дату в формат, который вы хотите. Например, SimpleDateFormat sdf = новый SimpleDateFormat («MM/DD/YYYY»). Так много формата доступно. Вот почему я говорю –

+0

извините, но вам нужно поговорить со мной, как im полный идиот, в основном даты в таблице - YYYY/MM/DD, так что мне нужно SimpleDateFormat sdf = new SimpleDateFormat («ГГГГ/ММ/ДД» ") вместо @yourdate? –

0

Должно быть легко, если вы не разложите день?

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

Только если они собираются родиться в следующие 7 дней. Любой, кто родился в прошлом, не удовлетворил бы критериям, т.е. кто-то родился 1 марта 1970 года имеет день рождения в ближайшие семь дней, но их дата рождения не находится между теперь() и теперь() + 7. – GarethD