SQL查詢範圍重疊的資料

2021-05-31 21:41:54 字數 871 閱讀 6903

常常碰到要校驗資料範圍是否存在重疊衝突的情況,典型的場景是房間預訂。

假如房間a已經有9月1日-9月10日的預訂記錄,當其它客人再來預訂時,系統必須判斷,不能與這個日期範圍產生重疊。

有四種情況會產生重疊:

1、全包含:例如使用者企圖預訂8月30日-9月15日;

2、被包含:例如使用者企圖預訂9月5日-9月6日;

3、下限包含:例如使用者企圖預訂8月30日-9月2日;

4、上限包含:例如使用者企圖預訂9月8日-9月15日。

使用sql查詢判斷時,就需要考慮到這全部四種情況,而我們常常只考慮到其中兩種,錯誤的寫法就像這樣:

select

*from

rooms

whereid=

1and

(starttime

between

'2011-09-01

'and

'2011-09-10'or

endtime

between

'2011-09-01

'and

'2011-09-10')

正確的寫法如下:

select *

from rooms

where id = 1

and (starttime between '2011-09-01' and '2011-09-10' or

endtime between '2011-09-01' and '2011-09-10' or

'2011-09-01' between starttime and endtime or

'2011-09-10' between starttime and endtime)

這樣才算把四種情況都考慮周全了。

sql查詢 範圍查詢(區間查詢)

1 範圍查詢 區間查詢 2 in 3 查詢年齡為18,28,38的人 select from student where age 18 or age 28 or age 38 4 select from student where age in 18,28,38 5 not in6 查詢年齡為18,...

範圍內資料查詢的sql

between and 查詢範圍內的sql select from 表名 where 要查詢的字段 between 範圍的開始 and 範圍的結束 如果你的資料庫儲存的是時間戳的話,想要查詢某一天到某一天的範圍的話,可以使用這個,當然如果你的資料庫儲存的不是時間戳,也可以使用 to days to ...

《SQL語句WHERE查詢 範圍查詢 模糊查詢》

0 儲存過程開頭變數定義 fbegindate varchar 10 單據起始日期 fenddate varchar 10 單據截止日期。fitemid varchar 50 fitemid2 varchar 50 fcust varchar 50 fcust2 varchar 50 fstatus...