Может быть, что-то вроде этого:
Данные испытаний
CREATE TABLE Table1
(
id INT,
value VARCHAR(200)
)
INSERT INTO Table1
VALUES
(1,'value1,value2,value3'),
(2,'value3,value4,value9'),
(3,'value4,value8,value9'),
(4,'value2,value3,value9')
Функция разделения
CREATE FUNCTION dbo.Split (@sep char(1), @s varchar(512))
RETURNS table
AS
RETURN (
WITH Pieces(pn, start, stop) AS (
SELECT 1, 1, CHARINDEX(@sep, @s)
UNION ALL
SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
FROM Pieces
WHERE stop > 0
)
SELECT pn,
SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s
FROM Pieces
)
GO
Запрос
DECLARE @searchString VARCHAR(100)
SET @searchString='value1,value4,value8'
;WITH CTE
AS
(
SELECT
split.s as searchString
FROM
dbo.Split(',',@searchString) AS split
)
SELECT
*
FROM
Table1
WHERE EXISTS
(
SELECT
NULL
FROM
dbo.Split(',',Table1.value) AS split
WHERE EXISTS
(
SELECT
NULL
FROM
CTE
WHERE
CTE.searchString=split.s
)
)
Результат
id value
1 value1,value2,value3
2 value3,value4,value9
3 value4,value8,value9
Редактировать
Эта функция разделения использует разделитель и varchar
для разделения. Это рекурсивная функция, которая вычисляет начало и конец того места, где находится введенный sperator varchar
. Когда вычисляются начало и конец, substring
- это простая задача для выполнения.