我的桌子“生日”由朋友生日组成,如
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个生日和下个月的生日。 任何人都可以帮我解决这个问题吗?
答案 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 ;