繁体   English   中英

sql server日期范围条件

[英]sql server date range criteria

我正在asp.net项目上。 我有两个存储在数据库中的日期空缺。 过帐日期和截止日期。 我希望如果用户搜索日期范围内的任何空缺,那么如果空缺的开始日期或结束日期落在该范围内,则应将其选中。 例如,如果用户选择日期范围3月10日至4月10日,空缺开始日期为3月1日,截止日期为3月20日,则应该将其设为空。

虚拟SQL

select *
from vacancies v
where v.start date in date range or
      v. end date in date range

sql将是什么

如果您意识到开始日期和截止日期只是另一个范围,那么这只是一个查询,用于查找用户指定范围和空缺范围之间的所有重叠:

declare @StartRange datetime
declare @EndRange datetime
select @StartRange='20140310',@EndRange='20140410'

select
    *
from vacancies v
where v.startdate <= @EndRange and
      @StartRange <= v.deadline

(可能需要调整<=<取决于您是否认为范围具有包含端点或排除端点)。

基本逻辑是-如果第一个范围在第二个范围结束之前开始, 第二个范围在第一个范围结束之前开始,则两个范围重叠。

这也确实会出现一些空缺,例如,空缺的开始日期于用户指定的范围,而截止日期早用户指定的范围。 这与您的虚拟sql不匹配,但通常是理想的(即,在用户指定的整个范围内都空缺了)

您想要执行以下操作:

SELECT * 
FROM Vacancies v
WHERE v.StartDate Between @UserProvidedStartDate and @UserProvidedEndDate
   OR v.EndDate Between @UserProvidedStartDate and @UserProvidedEndDate

假定您具有与用户搜索条件一起传递的参数。

我看到的问题是,您将返回截止日期已过去的空缺职位。 如果您从查询中排除空缺开始日期,则只会显示截止日期在条件内的空缺。 在这种情况下,您只需执行以下操作:

SELECT * 
FROM Vacancies v
WHERE v.EndDate Between @UserProvidedStartDate and @UserProvidedEndDate

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM