Преобразование кода regex_substr и listagg в SQL Server - PullRequest
0 голосов
/ 27 сентября 2018

Я ищу немного помощи.Я преобразовываю что-то из Oracle в SQL Server и нахожусь в очень трудном положении.

select distinct
    field1, field2, 
    regexp_substr(path, '[^/]+', 1, column_value) elem
from 
    grouped,
    table(cast(multiset(select level from dual
                        connect by level <= regexp_count(path,'/')) as sys.odciNumberList))
                        where regexp_substr(path, '[^/]+', 1, column_value) is not null),
     result as (
       select field1, field2,
              dense_rank()
               over (order by listagg(elem,',') within group (order by elem))
                grp
      from split
      group by field1, field2

У меня сложилось впечатление, что использование функции STUFF было бы вероятной альтернативой функции listagg(),но чтобы продвинуться дальше, мне нужно выяснить, как преобразовать код regex_substr() в SQL Server 2012.

Пример данных:

field1      field2
--------------------------------
02598559  | /04460516
04355059  | /04460576/05339398
04352043  | /04461255
--------------------------------

Каков наилучший способсправиться с этим?

1 Ответ

0 голосов
/ 28 сентября 2018

Я не уверен, что понимаю остальную логику, но это разделит строку с разделителями на таблицу, и я уверен, что вы можете работать с остальной частью запроса:

Этотестовые данные:

declare @t table(f1 varchar(10), f2 varchar(50))
insert @t values ('02598559','/04460516'),('04355059','/04460576/05339398'),('04352043','/04461255')
select * from @t

Это данные, разбитые на строки:

SELECT f1, O.splitdata 
FROM
 (
    SELECT *, cast('<X>' + replace(stuff(f2,1,1,''),'/','</X><X>')+'</X>' as XML) as xmlfilter from @t F
 )F1
 CROSS APPLY
 ( 
    SELECT fdata.D.value('.','varchar(50)') as splitdata 
    FROM f1.xmlfilter.nodes('X') as fdata(D)
 ) O

Это результат:

f1          splitdata
02598559    04460516
04355059    04460576
04355059    05339398
04352043    04461255

Надеюсь, это указывает на правильностьнаправление.

...