sql строка разделяется на определенное количество символов - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть строка типа 'aabbcczx', и мне нужно разделить эту строку на 2 символа. Ожидаемый результат примерно такой:

aabbcczx aa aabbcczx bb aabbcczx cc aabbcczx zx

Как я могу это сделать? Также учтите, что длина строки меняется строка за строкой.

Спасибо

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

Вы можете использовать рекурсивный запрос:

with cte as (
      select convert(varchar(max), left(str, 2)) as val2, convert(varchar(max), stuff(str, 1, 2, '')) as rest, str
      from (values ( 'aabbcczx' )) v(str)
      union all
      select left(rest, 2) as val2, stuff(rest, 1, 2, '') as rest, str
      from cte
      where rest <> ''
     )
select str, val2
from cte;
0 голосов
/ 16 ноября 2018

Вы можете использовать рекурсивный запрос для извлечения пар символов:

with instring as 
 ( select 'aabbcczx' as s )
 , splitter as
 (
   select s, substring(s, 1, 2) as rslt, 3 as next -- first two chars
   from instring
   union all
   select s, substring(s, next, 2), next + 2       -- next two chars
   from splitter
   where len(s) >= next
 )
select *
from splitter

См. dbfiddle

0 голосов
/ 16 ноября 2018

Если это всегда 2 символа:

SELECT  A.Val,
        CA1.N,
        SUBSTRING(A.Val,n,2)
FROM    (
            VALUES ('aabbcczx')
        ) AS A(Val)
CROSS
APPLY   dbo.GetNums(1,LEN(A.Val)) AS CA1
WHERE   CA1.n % 2 = 1;

GetNums - это генератор числовых таблиц / счетных таблиц, вы можете найти несколько источников в Интернете.

Это обеспечит положение каждого персонажа, и мы можем использовать это в substring начальной позиции. Предложение where использует MOD, поэтому мы показываем только все остальные начальные позиции

...