我有一个名为Product_Sales
的表,它保存了如下数据:
产品ID | 销售员 | 数量 | 开始日期 | 结束日期 |
---|---|---|---|---|
3 | 12 | 7 | 2013-01-05 | 2013-01-07 |
6 | 22 | 14 | 2013-01-06 | 2013-01-10 |
8 | 11 | 9 | 2013-02-05 | 2013-02-11 |
现在,如果我想从日期范围中选择两个日期之间的销售数据,应该怎么查询呢?
例如,我想选择从2013-01-03
到2013-01-09
的销售数据。
我有一个名为Product_Sales
的表,它保存了如下数据:
产品ID | 销售员 | 数量 | 开始日期 | 结束日期 |
---|---|---|---|---|
3 | 12 | 7 | 2013-01-05 | 2013-01-07 |
6 | 22 | 14 | 2013-01-06 | 2013-01-10 |
8 | 11 | 9 | 2013-02-05 | 2013-02-11 |
现在,如果我想从日期范围中选择两个日期之间的销售数据,应该怎么查询呢?
例如,我想选择从2013-01-03
到2013-01-09
的销售数据。
如您所见,有两种方法可以完成任务:
显然,第二种方法更简单(只有两种情况对抗四种情况)。
你的SQL将看起来像:
SELECT * FROM Product_sales
WHERE NOT (From_date > @RangeTill OR To_date < @RangeFrom)
WHERE NOT
条件,可以反转运算符并添加一个等号来完成工作:
SELECT * FROM Product_sales WHERE From_date <= @RangeTill OR To_date >= @RangeFrom
。 - Laurenz GlückSELECT * FROM Product_sales WHERE From_date <= @RangeTill AND To_date >= @RangeFrom
- andyfNOT (From_date > @RangeTill OR ISNULL(To_date, '12/31/9999') < @RangeFrom)
。 - thecoolmacdudeSELECT * from Product_sales where
(From_date BETWEEN '2013-01-03'AND '2013-01-09') OR
(To_date BETWEEN '2013-01-03' AND '2013-01-09') OR
(From_date <= '2013-01-03' AND To_date >= '2013-01-09')
您必须涵盖所有可能性。From_Date或To_Date可能在您的日期范围内,或记录日期可能覆盖整个范围。
如果From_date
或To_date
之一介于日期之间,或From_date
小于开始日期且To_date
大于结束日期,则应返回此行。
尝试使用以下查询以获取范围内的日期:
SELECT *
FROM Product_sales
WHERE From_date >= '2013-01-03' AND
To_date <= '2013-01-09'
start_date
之前但在start_date
和end_date
之间结束的销售情况。
另一方面,我想问题本身可能不够清晰,我们不确定是否只考虑在给定日期范围内的销售额,还是包括部分覆盖日期范围但可能延伸到一侧或两侧的销售额?因此,基本问题在于问题本身不够清晰。 - FallenAngelSELECT * FROM Product_sales
WHERE From_date between '2013-01-03'
AND '2013-01-09'
这涵盖了您正在寻找的所有条件。
SELECT * from Product_sales where (From_date <= '2013-01-09' AND To_date >= '2013-01-01')
SELECT *
FROM Product_sales
WHERE (
From_date >= '2013-08-19'
AND To_date <= '2013-08-23'
)
OR (
To_date >= '2013-08-19'
AND From_date <= '2013-08-23'
)
这很简单,使用以下查询语句可以在两个日期之间查找选择数据
select * from tabblename WHERE (datecolumn BETWEEN '2018-04-01' AND '2018-04-5')
请尝试以下方法:
DECLARE @FrmDt DATETIME, @ToDt DATETIME
SELECT @FrmDt='2013-01-03', @ToDt='2013-01-09'
SELECT *
FROM Product_sales
WHERE (@FrmDt BETWEEN From_date AND To_date) OR
(@ToDt BETWEEN From_date AND To_date)
select *
from table
where
( (table.EndDate > '2013-01-05') and (table.StartDate < '2013-01-07' ) )
我的建议是使用“dd-MMM-yyyy”格式,因为数据库服务器会知道你想要什么日期格式,无论服务器的区域设置如何。否则,在服务器的日期区域设置为yyyy-dd-mm(出于任何原因)的情况下,您可能会遇到问题。
因此:
SELECT * FROM Product_sales
WHERE From_date >= '03-Jan-2013'
AND To_date <= '09-Jan-2013'
这对我一直很有效果 ;-)