日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
實現(xiàn)內(nèi)容的時間交集計算的sql語句

sql語句可以實現(xiàn)大量我們需要的功能,下面介紹的sql語句可以實現(xiàn)內(nèi)容的時間交集計算,希望對您有所啟迪。

成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)站設計、成都網(wǎng)站制作、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務江陰,10年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:13518219792

如果在系統(tǒng)中有一張IM的登錄記錄表,里面是員工IM的登錄時間,有登錄時間,離線時間,***活動時間。

因為員工上半時有可能會同時登錄多個IM,其中的時間會有交集,因為要計算員工每天IM在線的工作時間,交集時間需要過濾掉。

直接在sql server中就可以比較方便的計算出相關內(nèi)容。具體的直接上sql語句代碼:

 
 
 
  1. --方便演示,定義一個Source的表變量,BeginTime是登錄時間,EndTime是離線時間
  2. declare @Source table(ID INT IDENTITY(1,1),BeginTime datetime, EndTime datetime)
  3. --定義輸出結果表變量
  4. declare @Result table(id INT IDENTITY(1,1),BeginTime datetime, EndTime DATETIME,OnlineTime INT NULL)
  5. --插入演示數(shù)據(jù)
  6. insert into @Source values('2010-08-16 08:00:00','2010-08-16 08:40:00')
  7. insert into @Source values('2010-08-16 09:00:00','2010-08-16 11:30:00')
  8. insert into @Source values('2010-08-16 09:01:00','2010-08-16 11:32:00')
  9. insert into @Source values('2010-08-16 10:01:00','2010-08-16 12:01:00')
  10. insert into @Source values('2010-08-16 11:00:00','2010-08-16 12:05:00')
  11. insert into @Source values('2010-08-16 12:10:00','2010-08-16 13:40:00')
  12. insert into @Source values('2010-08-16 13:10:00','2010-08-16 14:15:00')
  13. insert into @Source values('2010-08-16 14:00:00','2010-08-16 16:32:00')
  14. insert into @Source values('2010-08-16 07:20:00','2010-08-16 16:40:00')
  15. insert into @Source values('2010-08-16 17:00:00','2010-08-16 20:32:00')
  16. insert into @Source values('2010-08-16 07:00:00','2010-08-16 07:18:00')
  17. insert into @Source values('2010-08-16 07:30:00','2010-08-16 08:20:00')
  18. --模擬數(shù)據(jù)庫中的數(shù)據(jù),插入一些其他時間的數(shù)據(jù)
  19. insert into @Source values('2010-08-15 08:00:00','2010-08-16 08:40:00')
  20. insert into @Source values('2010-08-17 09:00:00','2010-08-16 11:30:00')
  21. insert into @Source values('2010-08-14 09:01:00','2010-08-16 11:32:00')
  22. insert into @Source values('2010-08-13 10:01:00','2010-08-16 12:01:00')
  23. insert into @Source values('2010-08-17 11:00:00','2010-08-16 12:05:00')
  24. insert into @Source values('2010-08-17 12:10:00','2010-08-16 13:40:00')
  25. insert into @Source values('2010-08-17 13:10:00','2010-08-16 14:15:00')
  26. insert into @Source values('2010-08-17 14:00:00','2010-08-16 16:32:00')
  27. insert into @Source values('2010-08-15 07:20:00','2010-08-16 16:40:00')
  28. insert into @Source values('2010-08-13 17:00:00','2010-08-16 20:32:00')
  29. insert into @Source values('2010-08-12 07:00:00','2010-08-16 07:18:00')
  30. insert into @Source values('2010-08-11 07:30:00','2010-08-16 08:20:00')
  31. --定義需要用到的變量
  32. DECLARE @count INT,@ID INT,@begintime DATETIME,@endtime DATETIME,@Date DATE
  33. --如果需要指定計算的日期,可以設置日期值,否則為null會計算全部的時間
  34. SET @Date = '2010-08-16 07:30:00'
  35. --如果日期不為空,則清除Source中的垃圾數(shù)據(jù)
  36. IF @Date IS NOT NULL
  37. BEGIN
  38.     DELETE FROM @Source WHERE BeginTime < @Date OR BeginTime >= DATEADD(DAY,1,@Date)
  39. END
  40. --計算Count,以便進行遍歷
  41. SELECT @count = COUNT(1) FROM @Source
  42. --遍歷Source中的數(shù)據(jù)
  43. WHILE @count > 0
  44. BEGIN
  45.     
  46.     --根據(jù)時間排序,每次取1條數(shù)據(jù)
  47.     SELECT TOP 1 @begintime = BeginTime,@endtime = EndTime ,@IDID = ID FROM @Source
  48.     ORDER BY BeginTime
  49.     
  50.     --如果Result中沒有記錄,則直接插入,否則進行判斷
  51.     IF NOT EXISTS(SELECT 1 FROM @Result)
  52.     BEGIN
  53.         insert into @Result values(@begintime,@endtime,NULL);
  54.     END
  55.     ELSE
  56.     BEGIN
  57.         --由于Source的數(shù)據(jù)是經(jīng)過排序的,所以下面的插入已經(jīng)無效,直接注釋掉
  58.         --IF NOT EXISTS(SELECT 1 FROM @Result WHERE BeginTime < @endtime AND EndTime < @begintime)
  59.         --BEGIN
  60.         --    insert into @Result values(@begintime,@endtime,NULL);
  61.         --END
  62.         
  63.         --如果開始時間大于Result中的已存在的記錄結束時間,則直接插入數(shù)據(jù)
  64.         IF NOT EXISTS(SELECT 1 FROM @Result WHERE EndTime > @begintime)
  65.         BEGIN
  66.             insert into @Result values(@begintime,@endtime,NULL);
  67.         END
  68.         --判斷Result中的數(shù)據(jù)開始時間是否大于Source中的開始時間,大于則更新
  69.         ELSE IF EXISTS(SELECT 1 FROM @Result WHERE BeginTime > @begintime AND EndTime < @endtime AND EndTime > @endtime)
  70.         BEGIN
  71.             UPDATE @Result SET BeginTime = @begintime WHERE BeginTime > @begintime AND BeginTime < @endtime AND EndTime > @endtime
  72.         END
  73.         --判斷Result中的數(shù)據(jù)結束時間是否小于Source中的結束時間,小于則更新
  74.         ELSE IF EXISTS(SELECT 1 FROM @Result WHERE BeginTime < @begintime AND BeginTime < @endtime AND EndTime < @endtime AND EndTime > @begintime)
  75.         BEGIN
  76.             UPDATE @Result SET EndTime = @endtime WHERE BeginTime < @begintime AND BeginTime < @endtime AND EndTime < @endtime AND EndTime > @begintime
  77.         END
  78.         --判斷Result中的記錄時間是否被Source中的時間被包含,包含則開始與結束都更新
  79.         ELSE IF EXISTS(SELECT 1 FROM @Result WHERE BeginTime > @begintime AND BeginTime < @endtime AND EndTime < @endtime AND EndTime > @begintime)
  80.         BEGIN
  81.             SELECT * FROM @Result WHERE BeginTime > @begintime AND BeginTime < @endtime AND EndTime < @endtime AND EndTime > @begintime
  82.             UPDATE @Result SET BeginTime = @begintime, EndTime = @endtime WHERE BeginTime > @begintime AND BeginTime < @endtime AND EndTime < @endtime AND EndTime > @begintime
  83.         END
  84.     END
  85.     
  86.     --刪除已經(jīng)讀取過的記錄
  87.     DELETE FROM @Source WHERE id = @ID
  88.     --更新Count
  89.     SELECT @count = COUNT(1) FROM @Source
  90. END
  91. --計算OnlineTime
  92. UPDATE @Result SET OnlineTime = DATEDIFF(mi,BeginTime,EndTime)
  93. --顯示結果
  94. SELECT * FROM @Result

網(wǎng)站欄目:實現(xiàn)內(nèi)容的時間交集計算的sql語句
當前URL:http://m.5511xx.com/article/dpjieji.html