2015-01-03 2 views
0

Я пытаюсь получить дни рождения людей в течение недели. Сегодня 3 января. Когда я пытаюсь получить дни рождения на этой неделе, он не включает дни рождения декабря, которые принадлежат к этой неделе. Мой запрос sql выглядит следующим образом. Что в этом плохого?ключевое слово недели недели не включает ранние дни года

select id, birth, full_name, mobile, email 
from house_holders 
where Week(DATE_ADD(birth, INTERVAL year(NOW()) - year(birth) YEAR),1) = week(NOW(),1); 
+0

Пожалуйста, помогите мне решить эту проблему. –

+0

Пожалуйста, проверьте мой ответ. –

+0

Определите «неделю» .. – Strawberry

ответ

0

С условием Week(DATE_ADD(birth, INTERVAL year(NOW()) - year(birth) YEAR),1) = week(NOW(),1); вы получите только дни рождения, связанные с сегодняшним днем.

Это происходит потому, что результат Week(DATE_ADD('2014-12-29', INTERVAL year(NOW()) - year('2014-12-29') YEAR),1) является 53, в то время как результат week(NOW(),1); является 1, и тогда вы никогда не получите результаты, которые вы хотите. Действительно, даты, такие как '2014-12-29', рассматриваются и оцениваются как часть последней недели 2014 года, а не в текущем году 2015 года.

Если вы хотите получить дни рождения текущей недели, вы должны отфильтровать дни рождения, используя DATE_ADD() function вместе с DAYOFWEEK() function:

SELECT id, birth 
FROM house_holders 
WHERE birth >= DATE_ADD(CURDATE(), INTERVAL 1-DAYOFWEEK(CURDATE()) DAY) 
AND birth <= DATE_ADD(CURDATE(), INTERVAL 7-DAYOFWEEK(CURDATE()) DAY); 

Смотреть демо here.

+0

Когда год в 1989 году или что-то не принадлежит 2014 году или 2015 году, это не сработает. Я хочу проверить дни рождения. Спасибо за ваш ответ. Пожалуйста, обновите это в течение любого года. –

+0

@GayanFernando Действительно, решение связано с днями рождения текущей недели, так как вы спросили: «Я пытаюсь получить дни рождения людей в неделю» или «Когда я пытаюсь получить дни рождения на этой неделе, это не включая декабрьские дни рождения, которые принадлежат к этой неделе ». Вы должны уточнить, чего вы действительно хотите достичь. Что вы подразумеваете под «Я хочу проверить дни рождения»? –

+0

Если у кого-то день рождения 30-12-1989, я хочу включить этого человека в выход. Не только дни рождения в 2014 и 2015 годах, которые относятся к этой неделе. –