生日的sql查询问题

时间:2014-04-30 17:21:13

标签: php mysql sql

我一直有这个SQL查询问题,现在想澄清一下.. 我的意图是将所有那些生日都在两天之内的成员拉出来,而不管这一年。我使用以下查询

 $sql = "SELECT * 
         FROM family_member 
         WHERE DATE_FORMAT(dob, '%c-%d') 
             BETWEEN DATE_FORMAT('2013-".$from_month."-".$from_day."', '%c-%d')  
             AND DATE_FORMAT('2013-".$to_month."-".$to_day."', '%c-%d') 
         ORDER BY MONTH(dob), DAYOFMONTH(dob)";

只要from_month< TO_MONTH 但是,如果我想以另一种方式退出生活 - 12月1日至1月30日之间的生日(无论年份如何 - 现在都没有检索到记录),这不起作用。如果我可以改进查询,请告诉我。

我使用mmysql db

感谢, 塞缪尔马修斯。

2 个答案:

答案 0 :(得分:0)

假设您不必处理跨越月末的日期范围:

SELECT [fields]
FROM [table]
WHERE MONTH(birthday) = $month
  AND DAY(birthday) BETWEEN $start AND $end

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_month http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_day

答案 1 :(得分:0)

不确定我是如何错过的......我能够通过以下查询修复它

 $sql = "select * from family_member WHERE DATE_FORMAT(dob, '%c-%d') BETWEEN DATE_FORMAT('2013-".$from_month."-".$from_day."', '%c-%d')  AND DATE_FORMAT('2013-12-31', '%c-%d') union select * from family_member WHERE DATE_FORMAT(dob, '%c-%d') BETWEEN DATE_FORMAT('2013-01-01', '%c-%d')  AND DATE_FORMAT('2013-".$to_month."-".$to_day."', '%c-%d') order by MONTH(dob) desc, DAYOFMONTH(dob) asc";