我一直有这个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
感谢, 塞缪尔马修斯。
答案 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";