Возможным решением (с использованием LIKE
) является следующий оператор:
SELECT ReferenceNumber, CommaSeparatedColumn
FROM (VALUES
(1, '4,3,2,8'),
(2, '1,3,2,9'),
(3, '5,8')
) v (ReferenceNumber, CommaSeparatedColumn)
WHERE
(CONCAT(',', CommaSeparatedColumn, ',') LIKE '%,1,%') OR
(CONCAT(',', CommaSeparatedColumn, ',') LIKE '%,2,%')
Результат:
ReferenceNumber CommaSeparatedColumn
1 4,3,2,8
2 1,3,2,9
Дополнительная опция - использовать STRING_SPLIT()
(для SQL Сервер 2016 +):
DECLARE @match varchar(100) = '1,2'
SELECT ReferenceNumber, CommaSeparatedColumn
FROM (VALUES
(1, '4,3,2,8'),
(2, '1,3,2,9'),
(3, '5,8')
) v (ReferenceNumber, CommaSeparatedColumn)
WHERE EXISTS (
SELECT 1
FROM STRING_SPLIT(v.CommaSeparatedColumn, ',') s1
JOIN STRING_SPLIT(@match, ',') s2 ON s1.[value] = s2.[value]
)
или
SELECT ReferenceNumber, CommaSeparatedColumn
FROM (VALUES
(1, '4,3,2,8'),
(2, '1,3,2,9'),
(3, '5,8')
) v (ReferenceNumber, CommaSeparatedColumn)
WHERE EXISTS (
SELECT 1
FROM STRING_SPLIT(v.CommaSeparatedColumn, ',')
WHERE [value] IN ('1', '2')
)