2015-06-11 2 views
1

У меня есть значения столбца = 1,2,3 и 0,1 по 2 записям.SQL - манипуляция значения столбца - набор данных возврата

При выборе обе записи с точки зрения я пытаюсь удалить «1» и «1»

Моя попытка ниже;

CAST(CASE WHEN (column like '%1%') THEN (ReturnTheValueWithout 1 OR 1,) 
ELSE column END AS VARCHAR) AS NewColumnName 
+0

The (ReturnTheValueWithout 1 OR 1,) это просто комментарий, я не могу понять, что может пойти туда. Это основная проблема. – Darren

+0

Значение столбца может достигать 3 -------------- I.E (0,1,2,3) - его макс. – Darren

+0

Всегда ли это начинается с 0? '0',' 0,1', '0,1,2',' 0,1,2,3'? –

ответ

1

Вы можете использовать REPLACE:

SELECT REPLACE(REPLACE(column,'1,','')),',1','') 
FROM TableName 

Результат:

2,3 
0 

Образец результата в SQL Fiddle.

+0

Попробуйте с '1,11,2,1,3,4,1' –

+0

@GiorgiNakeuri: Обновлен мой ответ. –

+0

Выход 12,3,4, потерянный 11 –

0

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 
0

Один из способов сделать это с помощью REPLACE с другими строковыми функциями как LEFT и STUFF

Запрос

SELECT LEFT(STUFF(REPLACE(',' + Col1 + ',',',1,',','),1,1,''),LEN(STUFF(REPLACE(',' + Col1 + ',',',1,',','),1,1,''))-1) 

Test Script

DECLARE @v varchar(50) = '1,2,3' 

--SET @v = '0,1' 
SELECT LEFT(STUFF(REPLACE(',' + @v + ',',',1,',','),1,1,''),LEN(STUFF(REPLACE(',' + @v + ',',',1,',','),1,1,''))-1) 

Outp ут

0 
2,3 

Редактировать

Сокращенный вариант с REVERSE

SELECT REVERSE(STUFF(REVERSE(STUFF(REPLACE(',' + Col1 + ',',',1,',','),1,1,'')),1,1,'')) 
FROM... 

SQL Fiddle

Смежные вопросы