簡體   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