我有一个客户表,我想过滤所有生日在给定日期范围之间的客户,比如1月1日和3月15日。 我一直试图使用:
(DAY(birthday) >= 01 AND MONTH(birthday) >= 01) AND (DAY(birthday) <= 15 AND MONTH(birthday) <= 03)
但这只会返回生日在1日至15日之间的人,1月1日至15日,2月1日至15日和3月1日至15日。难道没有办法做到这一点:
birthday BETWEEN '%-01-01' AND '%-03-15'
提前致谢
答案 0 :(得分:3)
您可以将CASE
与WHERE
一起使用,例如:
WHERE
CASE
WHEN MONTH(birthday) BETWEEN 1 AND 2 THEN DAY(birthday) BETWEEN 1 AND 31
WHEN MONTH(birthday) = 3 THEN DAY(birthday) BETWEEN 1 AND 15
ELSE FALSE
END
答案 1 :(得分:2)
您也可以使用DayOfYear获取一年中的日期编号,因此1月1日是第1天。而1月8日是第213天。
这将完全忽略这一年。
SELECT *
FROM `table`
WHERE DayOfYear(`birthday`)
BETWEEN DayOfYear('01-01-01') AND DayOfYear('2200-03-15')