2014-10-03 70 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