Если вы используете SQL Server 2016+, вы можете попробовать использовать JSON подход. Вам необходимо преобразовать данные в действительный массив JSON и проанализировать массив JSON с помощью OPENJSON()
. Обратите внимание, что STRING_SPLIT()
здесь не вариант, потому что, как указано в документации, выходные строки могут быть в любом порядке, и порядок не обязательно соответствует порядку подстрок во входной строке .
Таблица:
CREATE TABLE Data (
ID int,
[String] varchar(100)
)
INSERT INTO Data
(ID, [String])
VALUES
(546, '1,2,1,5,7,8'),
(486, '2,4,8,1,5,1'),
(465, '18,11,20,1,4,18,11'),
(484, '11,10,11,12,50,11')
Заявление:
SELECT
ID,
CONCAT(FirstValue, ',', SecondValue) AS [String]
FROM (
SELECT
d.ID,
j.[value] As FirstValue,
LEAD(j.[value]) OVER (PARTITION BY d.ID ORDER BY CONVERT(int, j.[key])) AS SecondValue
FROM Data d
CROSS APPLY OPENJSON(CONCAT('[', d.[String], ']')) j
) t
WHERE t.FirstValue = '1'
Результат:
----------
ID String
----------
465 1,4
486 1,5
486 1,
546 1,2
546 1,5