通常,如果我想按日期范围对表格进行查询,我会这样做:
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
Run Code Online (Sandbox Code Playgroud)
现在我需要做同样的查询但忽略年份,所以我可以说从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
Run Code Online (Sandbox Code Playgroud)
如果起始DAY小于结尾,则上述查询工作正常.这意味着,如果我从2月20日到2月28日举行,它可以正常工作,但如果我去2月28日到3月2日它将无法正常工作.
任何解决方案,我可以在一个查询中实现这一点?
Apr*_*ion 11
...
AND DATE_FORMAT(t.DELIV_DATE, '%m%d') BETWEEN '0101' AND '0201'
...
Run Code Online (Sandbox Code Playgroud)
更新 - 处理在结束年度循环的范围(替换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'
)
)
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4084 次 |
| 最近记录: |