Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
CheaterX Member Откуда: Сообщений: 61 |
Добрый день! Необходимо распарсить строчку. Получил значения в виде таблицы, используя табличную фуункцию.select * from dbo.IMG_Parse_Values_String('2110=277559;2120=-240413;2100=37146;2210=0;2220=0;2200=37146;2310=0;2320=166;2330=-26455;2340=992;2350=-1304;2300=10545;2410=-3180;2421=0;2430=-1597;2450=544;2460=0;2400=6312;') Результат выполнения: 2110 277559 2120 -240413 2100 37146 2210 0 2220 0 2200 37146 2310 0 2320 166 2330 -26455 2340 992 2350 -1304 2300 10545 2410 -3180 2421 0 2430 -1597 2450 544 2460 0 2400 6312 Мне необходимо получить данные в одну строчку. Где наименование колонки будет названием параметра, а значением, соответственно значение. Смысл такой, что есть набор данных: 6318201091 2110=194;2120=0;2100=194;2210=0;2220=-184;2200=10;2310=0;2320=0;2330=0;2340=348;2350=-358;2300=0;2410=0;2421=0;2430=0;2450=0;2460=0;2400=0; 7841320354 2110=992325;2120=-929092;2100=63233;2210=0;2220=-37199;2200=26034;2310=604;2320=15672;2330=-27011;2340=16465;2350=-14989;2300=16775;2410=0;2421=-1186;2430=-5048;2450=507;2460=-73;2400=12161; 6316137411 2110=12911;2120=-10108;2100=2803;2210=0;2220=-2668;2200=135;2310=0;2320=1;2330=-9;2340=114568;2350=-114614;2300=81;2410=-26;2421=0;2430=0;2450=0;2460=0;2400=55; 6315559594 2110=6591;2120=-8245;2100=-1654;2210=0;2220=0;2200=-1654;2310=0;2320=0;2330=0;2340=7100;2350=-52;2300=5394;2410=0;2421=0;2430=0;2450=0;2460=-442;2400=4952; Надо, чтобы выводились названия по колонкам. 6318201091 194 0 194 0 -184 10 0 0 0 348 -358 0 0 0 0 0 0 0 7841320354 992325 -929092 63233 0 -37199 26034 604 15672 -27011 16465 -14989 16775 0 -1186 -5048 507 -73 12161 |
9 апр 15, 09:24 [17491966] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Создание набора с произвольным количеством столбцов - это не парсинг |
9 апр 15, 09:33 [17492024] Ответить | Цитировать Сообщить модератору |
CheaterX Member Откуда: Сообщений: 61 |
Число столбцов одинаковое. 18 значений. Наименование параметров тоже одинаковое. |
9 апр 15, 09:55 [17492146] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Тогда PIVOT вам поможет |
||
9 апр 15, 09:57 [17492162] Ответить | Цитировать Сообщить модератору |
AlanDenton Member [скрыт] Откуда: Сообщений: 1004 |
DECLARE @temp TABLE ( ID BIGINT PRIMARY KEY, Value VARCHAR(MAX) ) INSERT INTO @temp (ID, Value) VALUES (6318201091, '2110=194;2120=0;2100=194;2210=0;2220=-184;2200=10;2310=0;2320=0;2330=0;2340=348;2350=-358;2300=0;2410=0;2421=0;2430=0;2450=0;2460=0;2400=0;'), (7841320354, '2110=992325;2120=-929092;2100=63233;2210=0;2220=-37199;2200=26034;2310=604;2320=15672;2330=-27011;2340=16465;2350=-14989;2300=16775;2410=0;2421=-1186;2430=-5048;2450=507;2460=-73;2400=12161;'), (6316137411, '2110=12911;2120=-10108;2100=2803;2210=0;2220=-2668;2200=135;2310=0;2320=1;2330=-9;2340=114568;2350=-114614;2300=81;2410=-26;2421=0;2430=0;2450=0;2460=0;2400=55;'), (6315559594, '2110=6591;2120=-8245;2100=-1654;2210=0;2220=0;2200=-1654;2310=0;2320=0;2330=0;2340=7100;2350=-52;2300=5394;2410=0;2421=0;2430=0;2450=0;2460=-442;2400=4952;') SELECT * FROM ( SELECT t.ID, Col = PARSENAME(t.Value, 2), Val = PARSENAME(t.Value, 1) FROM ( SELECT t.ID, Value = REPLACE(t2.c2.value('.', 'VARCHAR(100)'), '=', '.') FROM ( SELECT ID, Value = CAST('<r><s>' + REPLACE(Value, ';', '</s><s>') + '</s></r>' AS XML) FROM @temp ) t CROSS APPLY t.Value.nodes('r/*') t2(c2) ) t ) t PIVOT ( MAX(Val) FOR Col IN ( [2100],[2110], [2120],[2200],[2210],[2220], [2300],[2310],[2320],[2330], [2340],[2350],[2400],[2410], [2421],[2430],[2450],[2460] ) ) p |
9 апр 15, 11:21 [17492668] Ответить | Цитировать Сообщить модератору |
еще вариант...
Guest |
declare @t table (idx bigint, s varchar(max)) insert @t(idx,s) values (6318201091, '2110=194;2120=0;2100=194;2210=0;2220=-184;2200=10;2310=0;2320=0;2330=0;2340=348;2350=-358;2300=0;2410=0;2421=0;2430=0;2450=0;2460=0;2400=0;'), (7841320354, '2110=992325;2120=-929092;2100=63233;2210=0;2220=-37199;2200=26034;2310=604;2320=15672;2330=-27011;2340=16465;2350=-14989;2300=16775;2410=0;2421=-1186;2430=-5048;2450=507;2460=-73;2400=12161;'), (6316137411, '2110=12911;2120=-10108;2100=2803;2210=0;2220=-2668;2200=135;2310=0;2320=1;2330=-9;2340=114568;2350=-114614;2300=81;2410=-26;2421=0;2430=0;2450=0;2460=0;2400=55;'), (6315559594, '2110=6591;2120=-8245;2100=-1654;2210=0;2220=0;2200=-1654;2310=0;2320=0;2330=0;2340=7100;2350=-52;2300=5394;2410=0;2421=0;2430=0;2450=0;2460=-442;2400=4952;') declare @s varchar(max) ;with t0 as ( select idx, cast('<b>'+replace(substring(s,1,len(s)-1),';','</b><b>')+'</b>' as xml) xm from @t ), t1 as ( select idx, x.z.value('.', 'varchar(max)')[st] from t0 outer apply xm.nodes('b') x(z) ), t2 as ( select idx, stuff(st,1,charindex('=',st),'') [st] from t1 ) select @s = (select distinct 'select ' + cast(idx as varchar(25)) +', '+ stuff((select ',' + st from t2 b where b.idx = t2.idx for xml path('')),1,1,'') + ' union all' + char(10) from t2 for xml path('')); select @s = substring(@s, 1, len(@s)-10) exec(@s) |
9 апр 15, 11:37 [17492776] Ответить | Цитировать Сообщить модератору |
CheaterX Member Откуда: Сообщений: 61 |
Спасибо огромное! 1 запрос отлично сработал. |
9 апр 15, 13:26 [17493515] Ответить | Цитировать Сообщить модератору |
AlanDenton Member [скрыт] Откуда: Сообщений: 1004 |
Рад был помочь. Хорошего дня. |
9 апр 15, 13:42 [17493661] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |