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

Откуда:
Сообщений: 83
Привет всем

Есть параметр @par = '1234;3424;23424;23424;23424'
Есть таблица tab в которой колонка value имеет значения типа '1234','23424' итд
как мне вывести те строки значение поля value которых есть в параметре @par?
7 сен 11, 17:44    [11243095]     Ответить | Цитировать Сообщить модератору
 Re: Работа со строкой  [new]
Sender
Member

Откуда: Togliatti
Сообщений: 148
select *
from table
where Patindex('%12345%',value) !=0

Только я тут не учел, что запрос найдет и 012345 и 12345678 и так далее, но копать в эту сторону
7 сен 11, 18:06    [11243320]     Ответить | Цитировать Сообщить модератору
 Re: Работа со строкой  [new]
Sender
Member

Откуда: Togliatti
Сообщений: 148
а, нет, наоборот же надо, в другую сторону
сейчас...
7 сен 11, 18:08    [11243344]     Ответить | Цитировать Сообщить модератору
 Re: Работа со строкой  [new]
Sender
Member

Откуда: Togliatti
Сообщений: 148
declare @par as varchar(254) = '1234;5487'
select *
from table
where Patindex('%'+value+'%',@par) !=0

так
7 сен 11, 18:12    [11243367]     Ответить | Цитировать Сообщить модератору
 Re: Работа со строкой  [new]
Sender
Member

Откуда: Togliatti
Сообщений: 148
declare @par as varchar(254) = '12345;65847;5487410'
select *
from table
where Patindex('%;'+value+';%',@par) !=0
union all
select *
from table
where Patindex(value+';%',@par) !=0
union all
select *
from table
where Patindex('%;'+value,@par) !=0

а это с учетом моего первого поста
7 сен 11, 18:18    [11243400]     Ответить | Цитировать Сообщить модератору
 Re: Работа со строкой  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
San4ooo,

по-хорошему, конечно, надо почитать про нормализацию и не хранить в одном поле несколько сущностей.

По-плохому же Вам придётся парсить @par и преобразовать его в рекордсет,
парсить колонку [value] и преобразовать её в рекордсет,
joinить полученные рекордсеты и отбрасывать те строки tab, котрые соответствуют рекордсету
из @par в менее, чем количество строк в этом рекордсете.
Как-то так.

Посмотрите, например, на эту функцию
Хотя, разных решений тут много: Массивы и Списки в SQL Server
7 сен 11, 20:36    [11243971]     Ответить | Цитировать Сообщить модератору
 Re: Работа со строкой  [new]
Leran2002
Member

Откуда: Алматы, Казахстан
Сообщений: 53
Здравствуйте!
Если я правильно понял, то нужно это:

/*
CREATE TABLE [dbo].[TAB](
	[ID] [int] NOT NULL PRIMARY KEY,
	[VALUE] [nvarchar](50) NOT NULL
)

INSERT TAB VALUES(1,'11')
INSERT TAB VALUES(2,'22')
INSERT TAB VALUES(3,'21')
INSERT TAB VALUES(4,'31')
INSERT TAB VALUES(5,'32')
*/

DECLARE @PAR NVARCHAR(50)
SET @PAR='11;21;33'

SET @PAR=';'+@PAR+';' -- добавляем вспомогательные ';' в начале и в конце строки

SELECT *
FROM TAB
WHERE @PAR LIKE '%;'+VALUE+';%' -- поиск на соответствие параметра значению столбца
8 сен 11, 13:26    [11247046]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить