最近4&即将到来的4个生日

时间:2013-12-23 13:14:34

标签: mysql jsp servlets

我的桌子“生日”由朋友生日组成,如

1990-11-13
1990-11-17
1990-11-19
1990-11-21
1990-11-21

等所有年份都是虚拟的。我试图显示像最近列表这样的朋友的生日,以及即将到来的这个查询。

select concat(fname,' - ',date_format(dob,'%D %b')) as 'birthday' 
FROM birthdays 
where MONTH(dob) = MONTH(NOW()) 
  and day(dob) between day(sysdate()) and day(sysdate())+10 
order by dob ;

仅显示当月的生日。

select concat(fname,' on ',date_format(dob,'%D %b')) as 'birthday' 
FROM birthdays 
where MONTH(dob) = MONTH(NOW()) 
  and day(dob) between day(sysdate())-8 and day(sysdate())-1 
order by dob ;

显示最近的生日。

我真正想要的是假设如果我在月末运行查询,它应该显示最近的3个生日和下个月的生日。 任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

请尝试以下方式..

Select * from birthdays where (MONTH(dob) = MONTH(NOW()) and day(dob) 
in (select day(dob) from birthdays where DAY(dob) BETWEEN DAY(SYSDATE())-8 
AND DAY(SYSDATE())-1 ORDER BY dob limit 3) ) or month(dob) = month(now())+1 

答案 1 :(得分:0)

如果您使用时间戳执行此操作,我相信如果您使用UNIX_TIMESTAMP功能而不是您当前使用的功能,它将起作用。然后,您可以减去要测量的秒数。

select concat(fname,' on ',date_format(dob,'%D %b')) as 'birthday' 
FROM birthdays 
where UNIX_TIMESTAMP(dob) between UNIX_TIMESTAMP(NOW()-(8*60*60*24)) and UNIX_TIMESTAMP(NOW()+(10*60*60*24))
order by dob ;