首页 > 解决方案 > 如何在 SQL 查询中同时使用 BETWEEN 和 OR 运算符

问题描述

我在使用 sql 查询来过滤日期范围之间的数据以及几个条件时遇到问题。这是我的查询,它正在返回数据,但BETWEEN日期范围未按预期工作。

select CAL_DT as CALDATE,
sum (ORDER_PALL) as PALL, 
sum (ORDER_QTY) as UNI 
from [ORDER] 
where CAL_DT BETWEEN '2021-08-07' and '2021-08-16' or
TYPE IN ('MANUAL','SYSTEM') OR
GMM IN ('123','345') 
group by CAL_DT order by CAL_DT ASC

输出:

CALDATE       PALL    UNI

2021-08-04     200     50
2021-08-05     600     30
2021-08-06     300     20
2021-08-07     0       10
2021-08-08     700     90
2021-08-09     300     20
2021-08-10     700     10

预期输出:

CALDATE       PALL    UNI

2021-08-07     0       10
2021-08-08     700     90
2021-08-09     300     20
2021-08-10     700     10

我的条件TYPEGMM有时可能为空。这就是为什么我想使用OR.

标签: mysqlsqljpamssql-jdbc

解决方案


听起来您可能想将您的条款的标准放在一起:WHERE

SELECT CAL_DT AS CALDATE,
       SUM(ORDER_PALL) AS PALL,
       SUM(ORDER_QTY) AS UNI
FROM [ORDER]
WHERE CAL_DT BETWEEN '20210807' AND '20210816' AND
      TYPE IN ('MANUAL', 'SYSTEM')
GROUP BY CAL_DT
ORDER BY CAL_DT;

注意:由于您似乎使用的是 SQL Server,而不是 MySQL,因此您应该使用明确的日期文字。所以使用'20210807'而不是'2021-08-07'.


推荐阅读