2015-06-11 75 views
1

我有2個記錄的列值= 1,2,3和0,1。SQL - 列值操作 - 返回數據集

當從視圖中選擇兩個記錄我試圖刪除「1」和「1」

我嘗試低於;

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

的(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

解決方法1:

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 

溶液2:

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與其它字符串函數一樣LEFTSTUFF

查詢

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

測試腳本

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 UT

0 
2,3 

編輯

一個較短的版本REVERSE

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

SQL Fiddle