2014-10-03 108 views
1

我有一個字符串組成的「N」位,即'010111000010...'SQL服務器字符串操作

每一位代表一個天(SQL服務器的datetime型),即2014-10-03 00:00:00.000

我知道只有2日期:日期字符串的第一位和最後一位的位。

Consecutives比特表示consecutives日期,即,如果第一比特(在這種情況下「0」)表示2014-10-03 00:00:00.000,第二(在這種情況下「1」)表示2014-10-04 00:00:00.000

欲檢索所有的日期0(所有位的值爲'0')並且以最簡單和快速的方式檢查這些日期是否屬於表'DayOff'(DayOff_Date列),並且如果可能的話沒有循環。

有人可以有相應的代碼做

非常感謝

回答

0

使用CHARINDEX你的字符串。 然後使用該索引

CHARINDEX (expressionToFind ,expressionToSearch [ , start_location ]) 
0

的CTE拉每個字符與同時添加到基礎日期的順序:

declare @str varchar(128) = '010111000010' 
declare @pos int   = 1 

;With T(pos, charbit) as 
(
    select @pos as pos, substring(@str, 1, 1) 
    union all 
    select pos + 1, substring(@str, pos + 1, 1) 
    from T 
    where pos <= len(@str) - 1 
) 
select 
    dateadd(DAY, pos, '2014-10-03 00:00:00.000') 
from T 
where charbit = 0 
option (MAXRECURSION 1000) 


(No column name) 
2014-10-04 00:00:00.000 
2014-10-06 00:00:00.000 
2014-10-10 00:00:00.000 
2014-10-11 00:00:00.000 
2014-10-12 00:00:00.000 
2014-10-13 00:00:00.000 
2014-10-15 00:00:00.000 
+0

非常感謝你亞歷克斯K.和喬金 - L.由Alex給出的代碼在查詢窗口中工作,但是當我想在一個函數中使用代碼時,它會產生以下錯誤(法語):'Lasélectiond'instructions包括黑客無法識別的客戶端'。在以下指令中:\t;用T(pos,charbit)作爲..我如何在一個函數中使用相同的代碼。謝謝 – user3569267 2014-10-03 12:56:24

+0

對不起Alex。你的代碼工作得很好。謝謝 – user3569267 2014-10-03 14:22:24