powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите распарсить NVARCHAR(MAX) в таблицу
4 сообщений из 4, страница 1 из 1
Помогите распарсить NVARCHAR(MAX) в таблицу
    #40030476
Игорь_UUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Помогите распарсить заполненную переменную NVARCHAR(MAX) в MSSQL 2016 и перевести её в табличный вариант:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
DECLARE @J NVARCHAR(MAX) = 
'A00-B99;Некоторые инфекционные и паразитарные болезни;
A00-A09;Кишечные инфекции;A00-B99
A00;Холера;A00-A09
A00.0;Холера, вызванная холерным вибрионом 01, биовар cholerae;A00
A00.1;Холера, вызванная холерным вибрионом 01, биовар eltor;A00
A00.9;Холера неуточненная;A00
A01;Тиф и паратиф;A00-A09
A01.0;Брюшной тиф;A01
A01.1;Паратиф A;A01
A01.2;Паратиф B;A01
A01.3;Паратиф C;A01
A01.4;Паратиф неуточненный;A01
A02;Другие сальмонеллезные инфекции;A00-A09'



Разделитель ";", переход на новую строку char(13). Получается 3 колонки.
...
Рейтинг: 0 / 0
Помогите распарсить NVARCHAR(MAX) в таблицу
    #40030500
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
DECLARE @J NVARCHAR(MAX) = 
N'A00-B99;Некоторые инфекционные и паразитарные болезни;
A00-A09;Кишечные инфекции;A00-B99
A00;Холера;A00-A09
A00.0;Холера, вызванная холерным вибрионом 01, биовар cholerae;A00
A00.1;Холера, вызванная холерным вибрионом 01, биовар eltor;A00
A00.9;Холера неуточненная;A00
A01;Тиф и паратиф;A00-A09
A01.0;Брюшной тиф;A01
A01.1;Паратиф A;A01
A01.2;Паратиф B;A01
A01.3;Паратиф C;A01
A01.4;Паратиф неуточненный;A01
A02;Другие сальмонеллезные инфекции;A00-A09'

SELECT MAX(CASE WHEN t.RN2 = 1 THEN t.value END)
     , MAX(CASE WHEN t.RN2 = 2 THEN t.value END)
     , MAX(CASE WHEN t.RN2 = 3 THEN t.value END)
FROM (
    SELECT t2.value, RN, RN2 = ROW_NUMBER() OVER (PARTITION BY RN ORDER BY 1/0)
    FROM (
        SELECT *, RN = ROW_NUMBER() OVER (ORDER BY 1/0)
        FROM STRING_SPLIT(@J, CHAR(13)) t
    ) t
    CROSS APPLY STRING_SPLIT(t.value, ';') t2
) t
GROUP BY RN
...
Рейтинг: 0 / 0
Помогите распарсить NVARCHAR(MAX) в таблицу
    #40030503
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь_UUS,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
DECLARE @J NVARCHAR(MAX) = 
'A00-B99;Некоторые инфекционные и паразитарные болезни;
A00-A09;Кишечные инфекции;A00-B99
A00;Холера;A00-A09
A00.0;Холера, вызванная холерным вибрионом 01, биовар cholerae;A00
A00.1;Холера, вызванная холерным вибрионом 01, биовар eltor;A00
A00.9;Холера неуточненная;A00
A01;Тиф и паратиф;A00-A09
A01.0;Брюшной тиф;A01
A01.1;Паратиф A;A01
A01.2;Паратиф B;A01
A01.3;Паратиф C;A01
A01.4;Паратиф неуточненный;A01
A02;Другие сальмонеллезные инфекции;A00-A09';

with x as (select  row_number() over (order by 1/0) as [rn], [value] from string_split(@j, char(13))),
     y as (select
                 x.[rn],
                 T.[cn],
                 T.[value]
           from x
               cross apply (select row_number() over (order by 1/0) as [cn], [value] from string_split(iif(x.[rn] = 1, [value], stuff([value], 1, 1, '')), ';')) T
          )
select
      [rn],
      max(case when [cn] = 1 then [value] end) as [c1],
      max(case when [cn] = 2 then [value] end) as [c2],
      max(case when [cn] = 3 then [value] end) as [c3]
from y
group by [rn];




я бы еще лидирующий char(10) убирал, обычно перенос строки идет как CRLF, разделяя только по char(13) у вас будет linefeed оставаться
...
Рейтинг: 0 / 0
Помогите распарсить NVARCHAR(MAX) в таблицу
    #40030504
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select
 d.n.value('value[1]', 'nvarchar(100)'),
 d.n.value('value[2]', 'nvarchar(100)'),
 d.n.value('value[3]', 'nvarchar(100)')
from
 (select cast(cast('' as xml).query('sql:variable("@j")') as nvarchar(max))) a(s) cross apply
 (select '<item><value>' + replace(replace(a.s, '&#x0A;', ''), '&#x0D;', '</value></item><item><value>') + '</value></item>') b(s) cross apply
 (select cast(replace(b.s, ';', '</value><value>') as xml)) c(x) cross apply
 c.x.nodes('item') d(n)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите распарсить NVARCHAR(MAX) в таблицу
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]