SQL服务器字符串操作
问题描述:
我有一个字符串组成的“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列),并且如果可能的话没有循环。
有人可以有相应的代码做
非常感谢
答
使用CHARINDEX你的字符串。 然后使用该索引
CHARINDEX (expressionToFind ,expressionToSearch [ , start_location ])
答
的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
非常感谢你亚历克斯K.和乔金 - L.由Alex给出的代码在查询窗口中工作,但是当我想在一个函数中使用代码时,它会产生以下错误(法语):'Lasélectiond'instructions包括黑客无法识别的客户端'。在以下指令中:\t;用T(pos,charbit)作为..我如何在一个函数中使用相同的代码。谢谢 – user3569267 2014-10-03 12:56:24
对不起Alex。你的代码工作得很好。谢谢 – user3569267 2014-10-03 14:22:24