我已经遍寻搜索,无法在任何地方找到此实现。T-SQL将字拆分为字符
比方说,我有一句话:QWERTY
我想获得该表:
Q
W
E
R
T
Y
或为QWERTY AnotherWord
我想获得
Q
W
E
R
T
Y
[space character here]
A
n
o
t
h
e
r
W
o
r
d
我已经遍寻搜索,无法在任何地方找到此实现。T-SQL将字拆分为字符
比方说,我有一句话:QWERTY
我想获得该表:
Q
W
E
R
T
Y
或为QWERTY AnotherWord
我想获得
Q
W
E
R
T
Y
[space character here]
A
n
o
t
h
e
r
W
o
r
d
像这样做:
select substring(a.b, v.number+1, 1)
from (select 'QWERTY AnotherWord' b) a
join master..spt_values v on v.number < len(a.b)
where v.type = 'P'
hi @ t-clausen.dk,该解决方案不适用于azure sql数据库。你有其他选择吗? –
在这里,你就会明白:
create table #words (
character varchar(1)
)
declare @test varchar(10)
select @test = 'QWERTY'
declare @count int, @total int
select @total = len(@test), @count = 0
while @count <= @total
begin
insert into #words select substring(@test, @count, 1)
select @count = @count + 1
end
select * from #words
drop table #words
谢谢,你。它也适用,但我想避免使用临时表。我想我可以使用变量表。 +1 –
请,请避免引用系统表,在系统数据库专门系统表。事实上,上述可能是选择的答案不会在一个Visual Studio编译2013数据库项目
表变量都很好,但递归的CTE是答案:
DECLARE @str VARCHAR(max)
SET @str = 'QWERTY AnotherWord'
WITH Split(stpos,endpos)
AS(
SELECT 1 AS stpos, 2 AS endpos
UNION ALL
SELECT endpos, endpos+1
FROM Split
WHERE endpos <= LEN(@str)
)
SELECT
'character' = SUBSTRING(@str,stpos,COALESCE(NULLIF(endpos,0),LEN(@str)+1)-stpos)
,'charindex' = stpos
FROM Split
尽管如此,对于使用上面的代码是为了获得一个表格,里面包含了代表用户不同权限的字母。这不是做这件事的方法。用一个ID,一个许可代码和一个描述制作一张表,然后在用户表和新的权限表之间建立一个链接表。这给你相同的能力,并不会让你解决这样的愚蠢问题。
Declare @word nvarchar(max)
Select @word = 'Hello This is the test';
with cte (Number)as
(Select 1
union all
select Number +1 From cte where number <len(@word)
)
select * from Cte Cross apply (Select SUBSTRING(@word,number,1)) as J(Letter)
这是http://stackoverflow.com/questions/697519/split-function-equivalent-in-tsql –
的副本抱歉,谷歌和计算器搜索没有返回任何结果的Userful。另一方面,我发现这里给出的答案更好更快,它更符合我对解决方案的需求。另外,我认为这是更直接的。 –