mysql - 忽略具有日期范围的 SQL 查询中的年份

标签 mysql sql

通常,如果我想按日期范围对表进行查询,我会这样做:

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 小于结束的 DAY,上述查询工作正常。这意味着如果我从 2 月 20 日到 2 月 28 日,它工作正常,但如果我从 2 月 28 日到 3 月 2 日,它就不会工作。

有什么解决方案可以在单个查询中实现吗?

最佳答案

...
AND DATE_FORMAT(t.DELIV_DATE, '%m%d') BETWEEN '0101' AND '0201'
...

更新 - 处理循环到年底的范围(将 01010201 替换为代表 fromto 的实际变量):

...
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'
     )
  )
...

关于mysql - 忽略具有日期范围的 SQL 查询中的年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9491312/

相关文章:

mysql - 为什么 SQL 导入语句在与多个 MySQL 客户端一起运行时速度更快

sql - Excel VBA 更新 SQL 表

php - MySQL - PHP Select - 不显示变音符号

mysql - 在 mysql 中只选择唯一的行/记录

mysql - WordPress WooCommerce 删除具有重复 SKU 的项目

mysql - 分类批量更新: MySql

mysql - 将 SQL 结果转换为 JSON 的正确方法

mysql - 对具有一对多关系的 3 个表进行 SQL 查询

php - Select List后查询SQL数据库

mysql - 在多个连接表和相关表中查找特定结果