Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Несколько значений в одной переменной и последующее ее использование - SQL Server  [new]
Aleksey br
Member

Откуда:
Сообщений: 76
Всем привет
Можно ли в MS SQL 2016 передать несколько значений в переменную?
а точнее как мне в переменную запихнуть несколько значений, а потом использовать эти значения в контексте:
Declare @var varchar(200)
 
SELECT @var =  [dbo].[City].[Citytbl]
       FROM [dbo].[City]
 
SELECT  [Sample]
  FROM [winner].[dbo].[AddressSample]
  where [Sample] like '%@var%'
10 мар 17, 17:54    [20283181]     Ответить | Цитировать Сообщить модератору
 Re: Несколько значений в одной переменной и последующее ее использование - SQL Server  [new]
s_ustinov
Member

Откуда: Munchen, DE
Сообщений: 2307
Aleksey br
Всем привет
Можно ли в MS SQL 2016 передать несколько значений в переменную?

А зачем?
Создаем временную таблицу, записываем в нее несколько записей (несколько значений переменной) и используем в запросах...
10 мар 17, 18:23    [20283267]     Ответить | Цитировать Сообщить модератору
 Re: Несколько значений в одной переменной и последующее ее использование - SQL Server  [new]
o-o
Guest
в табличную переменную кладите.
потом в курсоре выполняйте, что надо.
надо 1 ре3алтсет на 1 переменную или это вы так условие OR реализовываете?
10 мар 17, 18:25    [20283274]     Ответить | Цитировать Сообщить модератору
 Re: Несколько значений в одной переменной и последующее ее использование - SQL Server  [new]
abcx
Guest
Aleksey br,

C. Declaring a variable of type table
10 мар 17, 18:25    [20283275]     Ответить | Цитировать Сообщить модератору
 Re: Несколько значений в одной переменной и последующее ее использование - SQL Server  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 4186
Aleksey br
Всем привет
Можно ли в MS SQL 2016 передать несколько значений в переменную?
а точнее как мне в переменную запихнуть несколько значений, а потом использовать эти значения в контексте:
Declare @var varchar(200)
 
SELECT @var =  [dbo].[City].[Citytbl]
       FROM [dbo].[City]
 
SELECT  [Sample]
  FROM [winner].[dbo].[AddressSample]
  where [Sample] like '%@var%'


Если не устраивают варианты приведеннеые выше можно склепать в строку через и сделать динамический запрос

Но если запихивание нужно, чтобы потом сделать лайк, как описано в мэсыджэ, то надо подумать, что вы хотите сделать.
Пример приведите
10 мар 17, 18:42    [20283338]     Ответить | Цитировать Сообщить модератору
 Re: Несколько значений в одной переменной и последующее ее использование - SQL Server  [new]
Aleksey br
Member

Откуда:
Сообщений: 76
Ролг Хупин,

К примеру:
В [dbo].[AddressSample].[Sample] было "проспект Независимости 23, Минск, Беларусь"
В [dbo].[City].[Citytbl] содержится справочник: Киев, Париж, Минск, Питер и прочее...
Нужно, чтобы перебирало значения из [dbo].[City].[Citytbl], находило 100% совпадения и в итоге записывало их в отдельное поле.
11 мар 17, 13:47    [20284450]     Ответить | Цитировать Сообщить модератору
 Re: Несколько значений в одной переменной и последующее ее использование - SQL Server  [new]
Aleksey br
Member

Откуда:
Сообщений: 76
o-o,

с табличной переменной почему-то не получилось((
11 мар 17, 13:50    [20284451]     Ответить | Цитировать Сообщить модератору
 Re: Несколько значений в одной переменной и последующее ее использование - SQL Server  [new]
Massa52
Member

Откуда:
Сообщений: 388
Aleksey br,
А глянуть как то на эту Citytbl можно?
Чет подозрительно - что это вроде таблица - а там все через запятую в одну запись все набили.
11 мар 17, 14:22    [20284477]     Ответить | Цитировать Сообщить модератору
 Re: Несколько значений в одной переменной и последующее ее использование - SQL Server  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5124
Aleksey br
К примеру:
В [dbo].[AddressSample].[Sample] было "проспект Независимости 23, Минск, Беларусь"
В [dbo].[City].[Citytbl] содержится справочник: Киев, Париж, Минск, Питер и прочее...
Нужно, чтобы перебирало значения из [dbo].[City].[Citytbl], находило 100% совпадения и в итоге записывало их в отдельное поле.
Aleksey br
с табличной переменной почему-то не получилось((
declare @Address table (id int identity, adr nvarchar(100))
declare @City table (id int identity, cty nvarchar(100))

insert @Address(adr) values(N'проспект Независимости 23, Минск, Беларусь'), (N'проспект 99, Москва, Россия'), (N'улица, Рязань, Россия')
insert @City(cty) values(N'Минск'), (N'Москва')

select
*
from
@Address a
left join @City c on a.adr like '%' + c.cty + '%'
11 мар 17, 16:19    [20284671]     Ответить | Цитировать Сообщить модератору
 Re: Несколько значений в одной переменной и последующее ее использование - SQL Server  [new]
Aleksey br
Member

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

не могу достучаться к БД со справочниками городов/улиц и прочего, но вот так, к примеру, выглядит малая часть исходных данных:
Картинка с другого сайта.
11 мар 17, 16:22    [20284677]     Ответить | Цитировать Сообщить модератору
 Re: Несколько значений в одной переменной и последующее ее использование - SQL Server  [new]
s_ustinov
Member

Откуда: Munchen, DE
Сообщений: 2307
Aleksey br
Massa52,

не могу достучаться к БД со справочниками городов/улиц и прочего, но вот так, к примеру, выглядит малая часть исходных данных:
Картинка с другого сайта.

Такое на perl надо разбирать - одно и то же сочетание букв и как город, и как часть названия области, и улица может называться Киевская. Например в Харькове есть Киевский район.
И структуру данных о городах надо доработать - учесть разные варианты написания (русский/украинский, ошибки, сокращения и т.п.).
11 мар 17, 16:31    [20284695]     Ответить | Цитировать Сообщить модератору
 Re: Несколько значений в одной переменной и последующее ее использование - SQL Server  [new]
Aleksey br
Member

Откуда:
Сообщений: 76
Дедушка,
отличный вариант, но можно ли как-то обойти частичные совпадения?
А еще не понятно как на одинаковых исходных адресах получился разный результат:
Картинка с другого сайта.
11 мар 17, 16:49    [20284731]     Ответить | Цитировать Сообщить модератору
 Re: Несколько значений в одной переменной и последующее ее использование - SQL Server  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5124
Aleksey br
Дедушка,
отличный вариант, но можно ли как-то обойти частичные совпадения?
А еще не понятно как на одинаковых исходных адресах получился разный результат:
это был просто пример использования табличной переменной с like, а не готовое решение.
что в ваших строках адресов является разделителем между элементами адреса (по каким правилам вы выделяете "город" из строки)?
11 мар 17, 17:30    [20284810]     Ответить | Цитировать Сообщить модератору
 Re: Несколько значений в одной переменной и последующее ее использование - SQL Server  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5124
как вариант для дальнейшей работы
declare @Address table (id int identity, adr nvarchar(100))
declare @City table (id int identity, cty nvarchar(100))

insert @Address(adr) 
values
(N'проспект Независимости 23, Минск, Беларусь'), 
(N'пр.Минский 99, Москва, Россия'), 
(N'пр Минск99, Москва, Россия'), 
(N'улица, Рязань, Россия')

insert @City(cty) values(N'Минск'), (N'Москва')

select
*
from
@Address a
left join @City c on a.adr like '%' + c.cty + '%'
		     and substring(a.adr, patindex('%' + c.cty + '%', a.adr) - 1, 1) not like '[0-9a-Zа-Я]'
		     and substring(a.adr, patindex('%' + c.cty + '%', a.adr) + len(c.cty), 1) not like '[0-9a-Zа-Я]'
11 мар 17, 17:54    [20284857]     Ответить | Цитировать Сообщить модератору
 Re: Несколько значений в одной переменной и последующее ее использование - SQL Server  [new]
Aleksey br
Member

Откуда:
Сообщений: 76
Дедушка
что в ваших строках адресов является разделителем между элементами адреса (по каким правилам вы выделяете "город" из строки)?

Не совсем понял вопрос... В основном элементы адреса записаны через запятую. А принадлежностью "некого набора символов" из этого адреса к "городу" является 100%-е совпадение таким же набором символов из таблицы с городами.
Так же проанализировав адреса, я у видел, что после названия города стоит или запятая, или точка или пробел.
Перед названием города так же может стоять пробел, запятая или пробел.
11 мар 17, 22:18    [20285470]     Ответить | Цитировать Сообщить модератору
 Re: Несколько значений в одной переменной и последующее ее использование - SQL Server  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5124
Aleksey br,
like
substring
patindex
11 мар 17, 23:00    [20285606]     Ответить | Цитировать Сообщить модератору
 Re: Несколько значений в одной переменной и последующее ее использование - SQL Server  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 942
Aleksey br,

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

Задача разбивки адресных строк на части - достаточно сложная, и четких алгоритмов нет - иначе б можно было нагуглить решение.
Самое простое - написать табличную UDF разбивки с помощью функций предложенных Дедушка, так сказать "решить в лоб".

Альтернативное решение:
1. Учите регулярные выражения.
2. Ищете сборки (а лучше сами напишите) - CLR C# Regexp, и устанавливаете на сервер.
3. Придумываете свое регулярное выражения для ваших данных.
4. Запускаете, тестируете, исправляете, повторяете до приемлемого результата.

Поздравляю, юный падаван, ты изобрел велосипед!
Но не печалься, велосипед этот каждый программист себя уважающий изобрести должен.
И знания эти использовать в крайних случаях надобно, как истинного джедая кодекс велит.
13 мар 17, 11:19    [20288586]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить