powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Парсинг строки
30 сообщений из 30, показаны все 2 страниц
Парсинг строки
    #35004355
PKovalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть задача вытащить напрямуй данные из 1с SQL.
Там встречаются столбцы содержащие строки вида, например:

',140030,Московская обл,Люберецкий р-н,,Малаховка п,Касимовское ш,3,Б,'

Можно ли эту строчку как-то элегантно распарсить?
Например, получть на выходе: 'Московская обл, Касимовское ш, 3Б'
Т.е. разложит по разделителю (,), а потом склеить как нужно.

Заранее спасибо!
...
Рейтинг: 0 / 0
Парсинг строки
    #35004362
Фотография Knyazev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PKovalenkoЕсть задача вытащить напрямуй данные из 1с SQL.
Там встречаются столбцы содержащие строки вида, например:

',140030,Московская обл,Люберецкий р-н,,Малаховка п,Касимовское ш,3,Б,'

Можно ли эту строчку как-то элегантно распарсить?
Например, получть на выходе: 'Московская обл, Касимовское ш, 3Б'
Т.е. разложит по разделителю (,), а потом склеить как нужно.

Заранее спасибо!
можно, читайте про строковые функции
...
Рейтинг: 0 / 0
Парсинг строки
    #35004440
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Строим заранее кривые структуры, мучаем форум, - потом тягостно проеодолеваем проблемы.
P.S. 1C - всё для людей! :)
...
Рейтинг: 0 / 0
Парсинг строки
    #35004444
Фотография Knyazev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
declare @str varchar( 1024 )
set @str=',140030,Московская обл,Люберецкий р-н,,Малаховка п,Касимовское ш,3,Б,'
select @str='select '''+replace(@str, ',', ''' as val union all select ''')+''''
declare @t table(id int identity, val varchar( 100 ))
insert into @t
exec (@str)
select val from @t where val!='' order by id;

--2005
declare @str2 varchar( 1024 )
set @str2=',140030,Московская обл,Люберецкий р-н,,Малаховка п,Касимовское ш,3,Б,';
with cte
as
(
select  1  id, convert(varchar(max), @str2) as str, convert(varchar(max), '') val 
union all
select id+ 1 , 
convert(varchar(max), stuff(str,  1 , charindex(',', str), '')), 
substring(str,  0 ,  charindex(',', str))
from cte
where val is not null
)
select val from cte where val!='' order by id
...
Рейтинг: 0 / 0
Парсинг строки
    #35004459
PKovalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Knyazev Alexey
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
declare @str varchar( 1024 )
set @str=',140030,Московская обл,Люберецкий р-н,,Малаховка п,Касимовское ш,3,Б,'
select @str='select '''+replace(@str, ',', ''' as val union all select ''')+''''
declare @t table(id int identity, val varchar( 100 ))
insert into @t
exec (@str)
select val from @t where val!='' order by id;


Супер решение.
Собственно так и хотел, но запутался с кавычками.
Спасибо!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Парсинг строки
    #36966704
PavM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения за некропаст, но не хочется пложить ряд тем

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

есть:
Код: plaintext
1.
2.
3.
DECLARE @TABLE table (CAT int, CAT_TYPE nvarchar( 100 ))

insert into @TABLE values ( 1 , '101,1002,10003')
insert into @TABLE values ( 2 , '1002,1005,1010')


нужно это получить как-то вроде:
1 101
1 1002
1 10003
2 1002
2 1005
2 1010

Заранее спасибо за любую помощь
...
Рейтинг: 0 / 0
Парсинг строки
    #36966745
PavM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Стоит куда-то что-то запостить, как решение само приходит :)

для тех, кто в будущем наткнется на эту тему:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
DECLARE @TABLE table (CAT int, CAT_TYPE nvarchar( 100 ))

insert into @TABLE values ( 1 , '1001,1002,1003')
insert into @TABLE values ( 2 , '1001,1005,1010')

declare @str varchar(max)
set @str = ''
select @str=@str+ case when len(@str) =  0  then '' else ' union all ' end +'select ' + cast(cat as NVARCHAR( 100 )) +' as column1 ,''' + replace(CAT_TYPE, ',', ''' as val union all select ' + cast(cat as NVARCHAR( 100 )) +',''')+ ''''
FROM @TABLE
...
Рейтинг: 0 / 0
Парсинг строки
    #36967094
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavMСтоит куда-то что-то запостить, как решение само приходит :)

для тех, кто в будущем наткнется на эту тему:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
DECLARE @TABLE table (CAT int, CAT_TYPE nvarchar( 100 ))

insert into @TABLE values ( 1 , '1001,1002,1003')
insert into @TABLE values ( 2 , '1001,1005,1010')

declare @str varchar(max)
set @str = ''
select @str=@str+ case when len(@str) =  0  then '' else ' union all ' end +'select ' + cast(cat as NVARCHAR( 100 )) +' as column1 ,''' + replace(CAT_TYPE, ',', ''' as val union all select ' + cast(cat as NVARCHAR( 100 )) +',''')+ ''''
FROM @TABLE


Для тех, кто сдуру захочет это поюзать: покурите SQL INJECTION.
Хе-хе.
...
Рейтинг: 0 / 0
Парсинг строки
    #36967121
Фотография Knyazev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavMСтоит куда-то что-то запостить, как решение само приходит :)


это решение не самое лучшее, по ряду причин...помимо озвученной выше, на больших объёма ваш запрос будет отрабатывать ой как долго, как вариант:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select cat, substring( cat_type, i2 +  1 , i1 - i2 - 1  ) val 
from
(
select cat
     , t1.cat_type
     , charindex( ',', t1.cat_type + ',', number ) i1
     , case when number =  0  then  0  else charindex( ',', t1.cat_type + ',', number -  1  ) end i2
  from @table t1 
    inner join master.dbo.spt_values t2
      on t2.type = 'P' and number between  0  and len( t1.cat_type )
) t where i1 != i2
...
Рейтинг: 0 / 0
Парсинг строки
    #36967319
Anddros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еше простенький вариант для 2005-го и выше:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
declare @t table (cat int, cat_type nvarchar( 100 ))

insert into @t values ( 1 , '1001,1002,1003')
insert into @t values ( 2 , '1001,1005,1010')

select cat,v 
from (select cat,cast('<r><c>'+replace(cat_type,',','</c><c>')+'</c></r>' as xml)s from @t)t
cross apply(select x.z.value('.', 'int') v from s.nodes('/r/c') x(z))tt
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Парсинг строки
    #38130269
PurpleTunes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребят, помогите с запросом пожалуйста.
Нужно из столбца FIO в таблице tabl1, перенести в tabl2 в отдельные столбцы fam, im и ot.

В tabl1.FIO данные в формате: Иванов Иван Иванович.
Нужно чтобы было: tabl2.fam - Иванов
tabl2.im - Иван
tabl2.im - Иванович
...
Рейтинг: 0 / 0
Парсинг строки
    #38130312
Мистер Хенки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PurpleTunesРебят, помогите с запросом пожалуйста.
Нужно из столбца FIO в таблице tabl1, перенести в tabl2 в отдельные столбцы fam, im и ot.

В tabl1.FIO данные в формате: Иванов Иван Иванович.
Нужно чтобы было: tabl2.fam - Иванов
tabl2.im - Иван
tabl2.im - Иванович
На всякий тюркоязычные отчетства двойные Иванович оглы. Бывают и двусоставные фамилии. Ни и вообще дофига всякого бывает. А так все приведенные выше примеры работать будут, только разделитель не ',' , а ' '
...
Рейтинг: 0 / 0
Парсинг строки
    #38130403
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Парсинг строки
    #38130430
Гость333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PurpleTunesНужно из столбца FIO в таблице tabl1, перенести в tabl2 в отдельные столбцы fam, im и ot.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
declare @names table (id int, fio varchar(100));

insert @names values (1, 'Иванов Иван Иванович оглы');
insert @names values (2, '   Петров-Водкин     Пётр     Петрович    ');
insert @names values (3, 'Бонд    Джеймс');
insert @names values (4, 'Человекбезпробела');
insert @names values (5, '  ');
insert @names values (5, '');
insert @names values (6, null);

select n.id, n.fio,
       case when b.fam_last > a.fam_first then substring(n.fio, a.fam_first, b.fam_last - a.fam_first + 1) else '' end as fam,
       case when d.im_last  > c.im_first  then substring(n.fio, c.im_first,  d.im_last  - c.im_first  + 1) else '' end as im,
       rtrim(ltrim(right(n.fio, n.len_fio - d.im_last))) as ot
from (select id, fio, len(fio) as len_fio from @names) n
     cross apply (select patindex('%[^ ]%', n.fio) as fam_first) a
     cross apply (select isnull(nullif(charindex(' ', n.fio, a.fam_first), 0) - 1, n.len_fio) as fam_last) b
     cross apply (select patindex('%[^ ]%', substring(n.fio, b.fam_last + 1, n.len_fio)) + b.fam_last as im_first) c
     cross apply (select isnull(nullif(charindex(' ', n.fio, c.im_first), 0) - 1, n.len_fio) as im_last) d;
...
Рейтинг: 0 / 0
Парсинг строки
    #38130486
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой как красииво... лишние пробелы... 3987988
всего 3 REPLACE
Код: sql
1.
2.
3.
4.
declare @chr char='_'
declare @str varchar(1000)=replicate(@chr, 10)+'b'+replicate(@chr, 15)+'c'+replicate(@chr, 1)+'d'+replicate(@chr, 20)+'e'+replicate(@chr, 30) --  '       b    c d     e     '
SELECT @str str, replace(replace(replace(@str,@chr+@chr,@chr+CHAR(1)), CHAR(1)+@chr,''), CHAR(1),'') f
SELECT @str str, replace(@str,@chr+@chr,@chr+CHAR(1))R1, replace(replace(@str,@chr+@chr,@chr+CHAR(1)), CHAR(1)+@chr,'') R2, replace(replace(replace(@str,@chr+@chr,@chr+CHAR(1)), CHAR(1)+@chr,''), CHAR(1),'') R3

Код: plaintext
1.
2.
3.
4.
5.
str                                                          f
__________b_______________c_d____________________e__________ _b_c_d_e_

str                                                          R1                                                           R2           R3
------------------------------------------------------------ ------------------------------------------------------------ ------------ ---------
__________b_______________c_d____________________e__________ _____b________c_d__________e_____ _b_c_d_e_ _b_c_d_e_
...
Рейтинг: 0 / 0
Парсинг строки
    #38132207
PurpleTunes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гость333
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
declare @names table (id int, fio varchar(100));

insert @names values (1, 'Иванов Иван Иванович оглы');
insert @names values (2, '   Петров-Водкин     Пётр     Петрович    ');
insert @names values (3, 'Бонд    Джеймс');
insert @names values (4, 'Человекбезпробела');
insert @names values (5, '  ');
insert @names values (5, '');
insert @names values (6, null);
......................



Спасибо большое!
...
Рейтинг: 0 / 0
Парсинг строки
    #38466021
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Knyazev AlexeyPavMСтоит куда-то что-то запостить, как решение само приходит :)


это решение не самое лучшее, по ряду причин...помимо озвученной выше, на больших объёма ваш запрос будет отрабатывать ой как долго, как вариант:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select cat, substring( cat_type, i2 + 1, i1 - i2 -1 ) val 
from
(
select cat
     , t1.cat_type
     , charindex( ',', t1.cat_type + ',', number ) i1
     , case when number = 0 then 0 else charindex( ',', t1.cat_type + ',', number - 1 ) end i2
  from @table t1 
    inner join master.dbo.spt_values t2
      on t2.type = 'P' and number between 0 and len( t1.cat_type )
) t where i1 != i2



вариант ещё хорош тем , что использовать его можно в функции. а вот exec нельзя !
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Парсинг строки
    #39090977
Time_Scream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Чтобы не постить новую тему спрошу здесь.

Есть текстовый файл вида
"1111","222222222","33333333","44","55","6";"7777","8888","99","1";11111.11
"2222","3333333","44444444","5","6","77";"8888","8888","11","2";22222.22

Задача распарсить его в таблицу вида

n1,n2,n3,n4,n5,n6,n7
...
Рейтинг: 0 / 0
Парсинг строки
    #39090984
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Time_ScreamЗадача распарсить его в таблицу вида
Это не распарсить.
Это импортировать.
Для этого для вас специально в студии сделали Import-Export wizard
...
Рейтинг: 0 / 0
Парсинг строки
    #39090986
Time_Scream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По разделителю ; bcp шкой занес а три ячейки m1,m2,m3
А вот дальше, нарезать так как задумано не получается.
Буду признателен любой помощи. Если была такая тема, ткните пальцем, спасибо.
...
Рейтинг: 0 / 0
Парсинг строки
    #39090990
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Time_ScreamБуду признателен любой помощи.
Откройте хелп по bcp

Time_ScreamЕсли была такая тема, ткните пальцем, спасибо.
ну если импорт называть парсингом, то такая тема не найдется никогда
...
Рейтинг: 0 / 0
Парсинг строки
    #39090994
Time_Scream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory,Спасибо, сейчас посмотрю наверное что-то упустил, импортировать-то я смог, по разделителю, а вот нарезать по ячейкам(
...
Рейтинг: 0 / 0
Парсинг строки
    #39091033
Time_Scream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory, import/export в wirard мне не подходит, загрузка не разовая, осуществляться будет без моего участия, посредством замены исходного файла
...
Рейтинг: 0 / 0
Парсинг строки
    #39091040
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Time_Screamimport/export в wirard мне не подходит, загрузка не разовая,осуществляться будет без моего участия,
Вы хоть до конца визарда дошли, прежде чем такие заявления делать ?
Кнопку "сохранить как пакет" видели ?
...
Рейтинг: 0 / 0
Парсинг строки
    #39091108
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GloryTime_Screamimport/export в wirard мне не подходит, загрузка не разовая,осуществляться будет без моего участия,
Вы хоть до конца визарда дошли, прежде чем такие заявления делать ?
Кнопку "сохранить как пакет" видели ?

Это SSIS. Даже Glory видит в нем пользу в решении таких задач.
...
Рейтинг: 0 / 0
Парсинг строки
    #39091132
Time_Scream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory, спасибо, попробовал не нравится wizard точечки в файле ((
...
Рейтинг: 0 / 0
Парсинг строки
    #39091150
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
a_voroninЭто SSIS. Даже Glory видит в нем пользу в решении таких задач.
даже коты любят огурцы

не забудьте закопирайтить новый слоган для рекламы SSIS
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Парсинг строки
    #39803399
Lennaganci
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вы поиздевались тут с кодом, разве нельзя попроще, все уже давно придумано в 3 строчки...

declare @Product table (ProductId int, Tags nvarchar(100))

insert into @Product values (1, '1001,1002,1003')
insert into @Product values (2, '1001,1005,1010')



SELECT ProductId, value
FROM @Product
CROSS APPLY STRING_SPLIT(Tags, ',');
...
Рейтинг: 0 / 0
Парсинг строки
    #39803403
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LennaganciНу вы поиздевались тут с кодом, разве нельзя попроще, все уже давно придумано в 3 строчки...

declare @Product table (ProductId int, Tags nvarchar(100))

insert into @Product values (1, '1001,1002,1003')
insert into @Product values (2, '1001,1005,1010')



SELECT ProductId, value
FROM @Product
CROSS APPLY STRING_SPLIT(Tags, ',');


как жаль, что никто не додумался.
...
Рейтинг: 0 / 0
Парсинг строки
    #39803404
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lennaganci,

о наш юный гений, как же это надо было использовать в 2015 году?
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Парсинг строки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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