我已經遍尋搜索,無法在任何地方找到此實現。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。另一方面,我發現這裏給出的答案更好更快,它更符合我對解決方案的需求。另外,我認爲這是更直接的。 –