我有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
我有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
您可以使用REPLACE
:
SELECT REPLACE(REPLACE(column,'1,','')),',1','')
FROM TableName
結果:
2,3
0
樣品結果SQL Fiddle。要做到這一點
嘗試用'1,11,2,1,3,4,1' –
@GiorgiNakeuri:更新了我的答案。 –
輸出是12,3,4,輸了11 –
解決方法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
一種方法是使用REPLACE
與其它字符串函數一樣LEFT
和STUFF
查詢
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...
的(ReturnTheValueWithout 1 OR 1)只是一個評論,我想不出什麼可以去那裏。這是主要問題。 – Darren
列值只能達到3 -------------- I.E(0,1,2,3)是其最大值。 – Darren
它總是從0開始的嗎? '0','0,1','0,1,2','0,1,2,3'? –