Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 выборка значения из строки  [new]
b00ring
Member

Откуда:
Сообщений: 59
Подскажите как лучше реализовать разбор строк с адресами, чтобы получить таблицу с полями: postal, city, street, house

Пример строк:
'postal==600025||city==Владимир||street==Октябрьская||house==155||'
'postal==39400||city==Воронеж||street==Вайцеховского||house==4/1||'

Теги postal, city, street, house могут быть в любом порядке, ограничитель строки "||"

На ум приходит сделать UDF, но хочется красивого Regex_Matches который пока не получается осилить.

Может есть еще какие решения?

Спасибо.
20 май 15, 11:38    [17665560]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
Glory
Member

Откуда:
Сообщений: 104760
b00ring
Может есть еще какие решения?

Полно. Стоит только воспользоваться поиском по форуму
20 май 15, 11:39    [17665569]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
b00ring
Member

Откуда:
Сообщений: 59
Искал, но видимо не так формулировал поиск.
20 май 15, 11:53    [17665631]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
Glory
Member

Откуда:
Сообщений: 104760
b00ring
Подскажите как лучше реализовать разбор строк

https://www.sql.ru/forum/afsearch.aspx?s=?????? ??????&submit=?????&bid=1
20 май 15, 11:55    [17665646]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
b00ring
Member

Откуда:
Сообщений: 59
Glory
Полно. Стоит только воспользоваться поиском по форуму


Glory, без обид, ваши ответы как обычно - отписка и отсылка в поиск. Сколько раз не читаю темы с вашими ответами, по существу 0. Стремитесь побыстрее наколбасить стотыщ сообщений?

Перед тем как создавать тему, просмотрел не 1 десяток похожих тем, но вопроса, похожего на мой не встретил.
20 май 15, 12:17    [17665760]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
SUBSTRING и PATINDEX вам в помощь.
20 май 15, 12:20    [17665770]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20600
b00ring
Перед тем как создавать тему, просмотрел не 1 десяток похожих тем, но вопроса, похожего на мой не встретил.

А не надо искать тему, где в строке указаны теги и разделитель именно "||". Ищите методы парсинга строк. И ссылка на поиск дана совершенно правильная, дающая МНОГО тем, из которых можно вынести методы решения такой задачи.
20 май 15, 12:21    [17665777]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
Glory
Member

Откуда:
Сообщений: 104760
b00ring
Glory, без обид, ваши ответы как обычно - отписка и отсылка в поиск

Наверное потому, что вопрос ваш такого уровня. Без обид

b00ring
Сколько раз не читаю темы с вашими ответами, по существу 0. Стремитесь побыстрее наколбасить стотыщ сообщений?

Да. Это единственная цель моей жизни. Спасибо, что написали еще одно бесполезное сообщение, на которое я могу что-то напсиать в ответ

b00ring
Перед тем как создавать тему, просмотрел не 1 десяток похожих тем, но вопроса, похожего на мой не встретил.

Поздравляю вас. Значит до вас вообще никто не сталкивался с разбором строки. У вас появилась уникальная возможность создать то, что до сихз пор не создавалось.
20 май 15, 12:21    [17665778]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
ЦБ
Member [заблокирован]

Откуда:
Сообщений: 2773
b00ring,

declare @t table (id int identity, txt varchar(1000))

insert into @t (txt)
select 'postal==600025||city==Владимир||street==Октябрьская||house==155||' union all
select 'postal==39400||city==Воронеж||street==Вайцеховского||house==4/1||'

;with a as
(select id, cast('<row '+replace(replace(txt, '==', '="'), '||', '" ')+' />' as xml) as xml_txt from @t)

select 
	 id 
	,t.c.value('@postal', 'varchar(100)') as postal
	,t.c.value('@city', 'varchar(100)') as city
	,t.c.value('@street', 'varchar(100)') as street
from a
cross apply xml_txt.nodes('/row') as t(c)


(2 row(s) affected)
id postal city street
----------- -------------------- -------------------- --------------------
1 600025 Владимир Октябрьская
2 39400 Воронеж Вайцеховского

(2 row(s) affected)
20 май 15, 12:40    [17665891]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
b00ring
Member

Откуда:
Сообщений: 59
Изящное решение, спасибо!
20 май 15, 17:37    [17668013]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
ЦБ
b00ring,

declare @t table (id int identity, txt varchar(1000))

insert into @t (txt)
select 'postal==600025||city==Владимир||street==Октябрьская||house==155||' union all
select 'postal==39400||city==Воронеж||street==Вайцеховского||house==4/1||'

;with a as
(select id, cast('<row '+replace(replace(txt, '==', '="'), '||', '" ')+' />' as xml) as xml_txt from @t)

select 
	 id 
	,t.c.value('@postal', 'varchar(100)') as postal
	,t.c.value('@city', 'varchar(100)') as city
	,t.c.value('@street', 'varchar(100)') as street
from a
cross apply xml_txt.nodes('/row') as t(c)


(2 row(s) affected)
id postal city street
----------- -------------------- -------------------- --------------------
1 600025 Владимир Октябрьская
2 39400 Воронеж Вайцеховского

(2 row(s) affected)


Это называется изящным решением?

Медаль автору

Картинка с другого сайта.
20 май 15, 18:36    [17668271]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
ЦБ
Member [заблокирован]

Откуда:
Сообщений: 2773
a_voronin,

ок, давай назовём это "просто решением"
Какие у тебя к нему претензии, и что ты можешь предложить как альтернативу этому решению?
20 май 15, 18:58    [17668329]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
ЦБ
a_voronin,

ок, давай назовём это "просто решением"
Какие у тебя к нему претензии, и что ты можешь предложить как альтернативу этому решению?


Воспользоваться SSIS

http://bi-polar23.blogspot.ru/2008/06/splitting-delimited-column-in-ssis.html
20 май 15, 19:05    [17668347]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
o-o
Guest
a_voronin

Медаль автору

Вы повторяетесь, сударь.
А у ЦБ решение учитывает возможность следования "тэгов" не по порядку,
у меня тоже в этой связи была мысль посмотреть в сторону xml,
только я с ним не дружу, увы.
Почему бы вам не предложить свое "более изящное"?
20 май 15, 19:09    [17668354]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
o-o
Guest
Ага, супер ssis-решение, как и ожидалось, только сплиттид. А собирать в 4 разные колонки кто будет?
Незачет, короче.
Ждем изящное и целое, а не "половину" с сомнительной изящностью
20 май 15, 19:15    [17668364]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
o-o
А собирать в 4 разные колонки кто будет?


http://sqlage.blogspot.ru/2013/12/ssis-how-to-use-pivot-transformation-in.html


Вам тоже могу выдать

Картинка с другого сайта.
20 май 15, 19:22    [17668382]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
o-o
Guest
+ to a_voronin
И уже 3 медали в полный рост.
Допустим, намеки вы не понимаете, но
утонуть-то не боитесь, когда выданное оптовым бумерангом к хозяину полетит?
20 май 15, 19:58    [17668480]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
ЦБ
Member [заблокирован]

Откуда:
Сообщений: 2773
a_voronin
ЦБ
a_voronin,

ок, давай назовём это "просто решением"
Какие у тебя к нему претензии, и что ты можешь предложить как альтернативу этому решению?


Воспользоваться SSIS

!!
А если нет SSIS-а ? А если это приложение распространяемое с Экспрессом, в 100500 копий, за которым будет сидеть такой ninorov.a, который, максимум на что способен, это "прогнать скрипт", но никак не развернуть IS-пакет ?

Вообщем держи, заслужил ! :)

+
Картинка с другого сайта.
20 май 15, 20:00    [17668485]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
ЦБ
a_voronin
пропущено...


Воспользоваться SSIS

!!
А если нет SSIS-а ? А если это приложение распространяемое с Экспрессом, в 100500 копий, за которым будет сидеть такой ninorov.a, который, максимум на что способен, это "прогнать скрипт", но никак не развернуть IS-пакет ?

Вообщем держи, заслужил ! :)

+
Картинка с другого сайта.


Если бы да кабы.

CLR функция прекрасно деплоится на Express. Можно класть сервак XML операциями конечно.

А вообще SQL сервер не место для строковых операций. То, что на высокоуровневом языке можно в несколько строк написать тут через одно место приходиться делать.
20 май 15, 20:26    [17668554]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
o-o
Guest
ЦБ
А если нет SSIS-а ?

да хоть бы и был.
не катит его "пивотная" ссылка.
не те входные данные.
а были бы "те", так и обычный пивот прокатил бы, или его тоже непременно надо через SSIS реализовывать?
это прибавляет изящности, наверное.

a_voronin,
если не понимаете, что у будет на выходе "первой части",
или в упор не видите, что это вовсе не то, что подается на вход "второй",
ну реализуйте от начала и до конца.
иначе вами предложенное и есть "если бы да кабы".
20 май 15, 20:57    [17668663]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31439
a_voronin
CLR функция прекрасно деплоится на Express. Можно класть сервак XML операциями конечно.
Вот если будет "класть", тогда можно рассмотреть варианты. Разные, не только CLR и SSIS

А пока не кладёт, нельзя советовать использовать эти механизмы для каждого случая. "Как сделать джойн таблиц? Воспользоваться SSIS"

Сразу можно советовать использовать SSIS только в случае импорта данных из внешних источников (для чего он собственно и предназначен), да и то не всегда. А CLR только в том случае, когда задача не решается другим способом.
20 май 15, 21:34    [17668795]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
a_voronin
CLR функция прекрасно деплоится на Express. Можно класть сервак XML операциями конечно.
Про парсинг строк в таблицу, CLR и укладывание сервера XML-лем - 15097121
a_voronin
А вообще SQL сервер не место для строковых операций.
Для чего SQL Server место или не место, решается в каждом конкретном случае индивидуально, путем анализа всех "за" и "против".
А вы, как любитель высказывать безапеляционные мнения, если хотите, можете скооперироваться с Колосовым - один будет на каждый чих клепать SSIS-пакеты, а другой приложения :)
20 май 15, 22:09    [17668925]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
a_voronin,
--CLR функция прекрасно деплоится на Express.


а теперь упросите владелцев хостинга добавить CLR - пошлют лесом
20 май 15, 22:21    [17668953]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
b00ring
хочется красивого Regex_Matches


with
t0(data) as
(
	select 'postal==600025||city==Владимир||street==Октябрьская||house==155||' union all
	select 'city==Воронеж||postal==39400||house==4/1||street==Вайцеховского||'
)
select
	ext.Regex_Match(data, N'(?<=postal\s*==\s*)([^|]*)', NULL) as postal,
	ext.Regex_Match(data, N'(?<=city\s*==\s*)([^|]*)', NULL) as city,
	ext.Regex_Match(data, N'(?<=street\s*==\s*)([^|]*)', NULL) as street,
	ext.Regex_Match(data, N'(?<=house\s*==\s*)([^|]*)', NULL) as house
from
	t0;



postal city street house
------------------------------ ------------------------------ ------------------------------ ------------------------------
600025 Владимир Октябрьская 155
39400 Воронеж Вайцеховского 4/1

(2 row(s) affected)


Только нужна последняя версия отсюда 17349189.
20 май 15, 22:41    [17669031]     Ответить | Цитировать Сообщить модератору
 Re: выборка значения из строки  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
+ регулярки для данных из топика можно упростить

(?<=postal==)[^|]*
(?<=city==)[^|]*
(?<=street==)[^|]*
(?<=house==)[^|]*
20 май 15, 23:10    [17669127]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить