Solution1:
DECLARE @s VARCHAR(20) = '1,11,2,1,3,4,1'
SELECT REPLACE(CASE WHEN LEFT(@s, 2) = '1,'
AND RIGHT(@s, 2) = ',1'
THEN SUBSTRING(@s, 3, LEN(@s) - 4)
WHEN LEFT(@s, 2) = '1,' THEN RIGHT(@s, LEN(@s) - 2)
WHEN RIGHT(@s, 2) = ',1' THEN LEFT(@s, LEN(@s) - 2)
ELSE @s
END, ',1,', ',')
Выход:
11,2,3,4
Solution2:
SELECT SUBSTRING(REPLACE(',' + @s + ',', ',1,', ','), 2, LEN(REPLACE(',' + @s + ',', ',1,', ','))-2)
Сокращенный вариант:
SELECT SUBSTRING(s, 2, LEN(s) - 2) FROM (SELECT REPLACE(',' + @s + ',', ',1,', ',') s)t
Solution3:
Самое короткое:
SELECT REPLACE(',' + REPLACE(@s, ',1,', ',,1,') + ',', ',1,', '')
Solution4:
выше решений не удалось здесь и там на какой-то сложной строки. Следующие работы по
DECLARE @s VARCHAR(120) = '1,31,11,2,1,3,4,1234,1,1,1,1,1,1,1,1,1,sfds,23,12,11,1'
SELECT REPLACE(REPLACE(REPLACE(CASE WHEN LEFT(@s, 2) = '1,'
AND RIGHT(@s, 2) = ',1'
THEN SUBSTRING(@s, 3, LEN(@s) - 4)
WHEN LEFT(@s, 2) = '1,' THEN RIGHT(@s, LEN(@s) - 2)
WHEN RIGHT(@s, 2) = ',1' THEN LEFT(@s, LEN(@s) - 2)
ELSE @s
END, ',1,', ',,1,,'), ',1,', ''), ',,', ',')
Выход:
31,11,2,3,4,1234,sfds,23,12,11
The (ReturnTheValueWithout 1 OR 1,) это просто комментарий, я не могу понять, что может пойти туда. Это основная проблема. – Darren
Значение столбца может достигать 3 -------------- I.E (0,1,2,3) - его макс. – Darren
Всегда ли это начинается с 0? '0',' 0,1', '0,1,2',' 0,1,2,3'? –