簡體   English   中英

SQL查詢以檢查時間塊是否已存在

[英]SQL Query to check if a timeblock already exists

搜索了很多,發現了很多,並提出了一個有效的查詢,但是有點慢。

我要檢查的是以下情況:

我有一個與StartTimeEndTime約會的表。 當我插入新約會時,當前不檢查指定時間timerange是否已有某種約會。 例如,我想插入一個帶有時間timeblock從09:00-09:30的約會,但是已經有一個從09: timeblock :30開始的約會,那么我需要通過查詢返回該特定約會。 同樣,需要返回重疊的塊和整個塊。 因此,實際上每個彼此聯系的約會都需要返回。

我現在有以下查詢:

SELECT * from dbo.Appointments
WHERE 
(('2017-09-26 09:00:00' > StartTime AND '2017-09-26 09:00:00' < EndTime) 
OR 
('2017-09-26 09:30:00' > StartTime AND '2017-09-26 09:30:00' < EndTime) 
OR 
(StartTime BETWEEN '2017-09-26 09:00:00' AND '2017-09-26 09:30:00'))

這將返回與新約會重疊或在新約會范圍內的每個約會,但這有點慢。

是否有其他query可以在一個SELECT中進行檢查,或者此OR OR語句是唯一的解決方案?

如果希望SQL快速運行,則肯定需要在StartTimeEndTime上建立索引。 而且,我猜下面的查詢也可以滿足您的需求,而且更微妙

SELECT * from dbo.Appointments
WHERE EndTime > '2017-09-26 09:00:00' AND StartTime < '2017-09-26 09:30:00'

比較兩個日期時在SQL中使用BETWEEN 不要使用>或<

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM