程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> sqlserver中如何查詢出連續日期記錄的代碼

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

編輯:更多數據庫知識

有在論壇上看到一帖,《請教查詢出連續日期記錄的方法》,截圖如下:


Insus.NET嘗試寫了程序並做了測試,可以得到預期的結果,SQL代碼可參考和學習之用。
復制代碼 代碼如下:
--創建一個臨時表,將會存儲連續日期的記錄
CREATE TABLE #temp (IDD VARCHAR(10),SDATE DATETIME)
DECLARE @sD DATETIME --開始日期
DECLARE @eD DATETIME --結束日期
--在記錄中,找出開始與結束日期
SELECT @sD = MIN([SDATE]), @eD = MAX([SDATE]) FROM [TT]
DECLARE @N INT = 0 --宣告一個變量,存儲累記錄數
--循環日期
WHILE (@sD <= @eD)
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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved