通常,如果我想按日期范围对表进行查询,我会这样做:
SELECT DISTINCT c.ID AS 'id' FROM CUST c JOIN TICKET t ON s.ID = t.SALE_ID WHERE c.ACTIVE_IND = 1 AND t.DELIV_DATE BETWEEN '01-01-2012' AND '01-02-2012' ORDER BY t.DELIV_DATE DESC
现在,我需要进行相同的查询,但忽略年份,因此可以说从2月28日到3月2日,年份无关紧要。
我尝试修改查询:
SELECT DISTINCT c.ID AS 'id' FROM CUST c JOIN TICKET t ON s.ID = t.SALE_ID WHERE c.ACTIVE_IND = 1 AND MONTH(t.DELIV_DATE) BETWEEN ... AND ... AND DAY(t.DELIV_DATE) ... BETWEEN ... ORDER BY t.DELIV_DATE DESC
如果开始的DAY小于结束的话,上面的查询工作正常。这意味着,如果我说从2月20日到2月28日,它可以正常工作,但是如果我从2月28日到3月2日,它将无法工作。
我可以在单个查询中实现此目的的任何解决方案?
... AND DATE_FORMAT(t.DELIV_DATE, '%m%d') BETWEEN '0101' AND '0201' ...
更新 -处理通过年末循环的范围(替换0101并0201使用代表from和的实际变量to):
0101
0201
from
to
... AND (DATE_FORMAT(t.DELIV_DATE, '%m%d') BETWEEN '0101' AND '0201' OR '0101' > '0201' AND (DATE_FORMAT(t.DELIV_DATE, '%m%d') >= '0101' OR DATE_FORMAT(t.DELIV_DATE, '%m%d') <= '0201' ) ) ...