我有一個包含一些時間跨度(兩個TIME
列)的表如何找出如果時間是在SQL Server序列2008
如:
TimeBegin TimeEnd
---------------- ----------------
00:00:00.0000000 01:00:00.0000000
01:00:00.0000000 02:00:00.0000000
01:30:00.0000000 03:00:00.0000000
我要弄清楚是否有時間跨度形成一個序列(在上述情況下從00.00 - 03.00)。一些時間跨度可能會重疊,如上例所示。
編輯 我伸出我的表:
WeekDay TimeBegin TimeEnd
----------- ---------------- ----------------
3 00:00:00.0000000 01:00:00.0000000
3 01:00:00.0000000 02:00:00.0000000
3 02:30:00.0000000 04:00:00.0000000
和使用的查詢:
;with sequenced as (
select *,rn=ROW_NUMBER() over (order by timebegin)
from tbl
where weekday(timebegin) = 2)
select *
from sequenced a
join sequenced b on a.rn=b.rn-1
where a.TimeEnd < b.TimeBegin
,但它說,'工作日」是無法識別的內置函數名稱。 「
,所以我把它改爲:
;with sequenced as (
select *,rn=ROW_NUMBER() over (order by timebegin)
from tbl
where weekday = 2)
select *
from sequenced a
join sequenced b on a.rn=b.rn-1
where a.TimeEnd < b.TimeBegin
但後來它返回一個包含
WeekDay TimeBegin TimeEnd
3 01:00:00.0000000 02:00:00.0000000
這實際上是該序列中的行?
感謝 托馬斯
以及預期輸出是什麼?只是一個「是的 - 這是一個序列」或什麼?應該列出造成衝突的行嗎?或那些整齊地形成一個序列?你需要更具體一點! – 2011-03-25 22:09:32
嗨marc_s。對於那個很抱歉。整個序列只需要真或假。謝謝 – ThomasD 2011-03-25 22:21:27
我強烈建議你發現一個ORM。如果我爲程序員建立了監獄,我會迫使他們編寫複雜的TSQL來折磨他們。 – 2011-03-25 23:31:23