SQL Server字符串操作

时间:2014-10-03 11:40:28

标签: sql-server tsql

我有一个由' n'组成的字符串。位,即'010111000010...'

每个位代表一天(sql server datetime类型),即2014-10-03 00:00:00.000

我只知道两个日期:字符串第一位的日期和最后一位的日期。

连续位代表连续日期,即如果第一位(在这种情况下' 0')代表2014-10-03 00:00:00.000,则第二位(在这种情况下' 1')代表2014-10-04 00:00:00.000

我想要检索所有0的日期(所有位都具有值' 0')而不是检查这些日期是否属于表格' DayOff' (DayOff_Date专栏)以最简单快捷的方式,如果可能的话,没有循环。

有人可以使用相应的代码来执行此操作

非常感谢

2 个答案:

答案 0 :(得分:0)

在字符串上使用Charindex。 然后使用该索引

CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )

答案 1 :(得分: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