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

4 ответов


делай так:

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'

это здесь:

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

пожалуйста, пожалуйста, избегайте ссылок на системные таблицы, особенно системные таблицы в системных базах данных. Фактически, выбранный выше ответ, вероятно, не будет компилироваться в проекте базы данных 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, a код разрешения и описание затем создайте таблицу связей между таблицей пользователи и новой таблицей разрешения. это дает вам те же способности и не заставляет вас решать глупые проблемы, как это.


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)