返回StartDate和EndDate的任何部分属于过滤日期范围内的数据

时间:2017-08-23 15:24:38

标签: sql sql-server

我有一堆带有StartDate和EndDate的产品记录。我还有一个以params传入的StartDate和EndDate过滤器设置。

目标:
返回产品日期范围的任何部分落在或等于过滤器设置日期范围之间的任何产品。

这是我的尝试,但它无效:

((@FilterStartDate <= prod.StartDate AND @FilterStartDate <= prod.EndDate)
OR
(@FilterEndDate >= prod.StartDate AND @FilterEndDate <= prod.EndDate))

3 个答案:

答案 0 :(得分:2)

也许这就是你希望这个简化版本只是检查开始或结束是否属于范围......

where
    (prod.StartDate >= @FilterStartDate and prod.StartDate <= @FilterEndDate)
    or 
    (prod.EndDate  >= @FilterStartDate and prod.EndDate <= @FilterEndDate) 

答案 1 :(得分:1)

您要检查过滤器开始日期是否在产品结束日期之前,过滤器结束日期是否在项目开始日期之后,例如:

@FilterStartDate <= prod.EndDate 
AND @FilterEndDate >= prod.StartDate

答案 2 :(得分:0)

假设您的日期列实际上是日期时间,您可以尝试

WHERE prod.StartDate&gt; ='yourStartDate'AND prod.EndDate&lt; 'yourEndDate'

或者,如果它不是日期时间而您更喜欢投射:

在'yourStartDate'和'yourEndDate'之间的过去(日期为日期)。