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)