sqlserver中如何查詢出連續(xù)日期記錄的代碼

Insus.NET嘗試寫了程序并做了測試,可以得到預(yù)期的結(jié)果,SQL代碼可參考和學(xué)習(xí)之用。

有在論壇上看到一帖,《》,截圖如下:

Insus.NET嘗試寫了程序并做了測試,可以得到預(yù)期的結(jié)果,SQL代碼可參考和學(xué)習(xí)之用。
代碼如下:
–創(chuàng)建一個(gè)臨時(shí)表,將會存儲連續(xù)日期的記錄
CREATE TABLE #temp (IDD VARCHAR(10),SDATE DATETIME)
DECLARE @sD DATETIME –開始日期
DECLARE @eD DATETIME –結(jié)束日期
–在記錄中,找出開始與結(jié)束日期
SELECT @sD = MIN([SDATE]), @eD = MAX([SDATE]) FROM [TT]
DECLARE @N INT = 0 –宣告一個(gè)變量,存儲累記錄數(shù)
循環(huán)日期
WHILE (@sD BEGIN
–如果存在
IF EXISTS (SELECT TOP 1 1 FROM [TT] WHERE [SDATE] = @sD)
BEGIN
SET @sD = DATEADD(day,1,@sD) –日期加1天
SET @N = @N + 1 –記錄加1
END
ELSE –如果不存在
BEGIN
IF (@N >= 3) –判斷是否大于或等于3
INSERT INTO #temp SELECT [IDD],[SDATE] FROM [TT] WHERE [SDATE] BETWEEN DATEADD(day,-@N,@sD) AND @sD
–日期加1天
SET @sD = DATEADD(day,1,@sD)
SET @N = 0 –初始化為0
END
END
–列出符合條件的記錄
SELECT * FROM #temp

上面的方法,實(shí)際可以把IF (@N >= 3)這句中的3改為一個(gè)變量,這樣可以方便以后的程序擴(kuò)展,某一天需要改為連續(xù)2天,4天,5天,或任何一天。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊9 分享