常常碰到要校驗資料範圍是否存在重疊衝突的情況,典型的場景是房間預訂。
假如房間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...