2016-03-15 180 views
0

我在SQL Server中的varchar字符串:提取從逗號分隔字符串字符串的SQL Server中的部分

DECLARE @vStr VARCHAR(MAX) = ';ABC,DEF,+123456789,+987654321,0,0,0,0,0,+987654321,1110:' 

該字符串我想造成這樣的:

'+123456789,+987654321,0,0,0,0,0,+987654321' 

DECLARE @vStr VARCHAR(MAX) = ';PQR,XYZ,+987654321,+987654321,0,0,0,0,0,+9876123456,5555:' 

應該產生的結果如:+987654321,+987654321,0,0,0,0,0,+9876123456

我正在嘗試substringleftlen但它不起作用。

UPDATE:

總的來說,我不想要這個逗號分隔字符串的前兩個組成部分,也是我不想用逗號分隔的字符串的最後一部分。

+0

你有混合字母+數字的情況下消除任何了第二個逗號?像ABC123,DEF123? – Squirrel

+0

是@Squirrel ..這是一種可能性 –

+0

通用規則是什麼?從帶有'+'的第一個字符串到帶有'+'的最後一個字符串? –

回答

3
select result = stuff(item, 1, charindex(',', item, charindex(',', item) + 1), '') 
from 
(
    -- exclude last item 
    select item = left(@vStr, len(@vStr) - charindex(',', reverse(@vStr))) 
) d 

交代

  • 內部查詢是exlude的最後一個項目。這是通過使用反轉字符串(reverse()),然後查找逗號「,」,然後使用LEFT()來獲得左部分到最後一個逗號來完成的。使用外部2 charindex()查詢是要找到第二個逗號

  • ,然後用東西()
+0

明智的解決方案!如果你包含更多的解釋,會更好。 –

+1

您好。 。 。 。 – Squirrel

+0

@Squirrel感謝您的及時解決方案 –

0

可以請你試試這個

select substring(substring (substring(@vStr,1,len(@vStr)),10,len(@vStr)),0,len(@vStr)-14) 
+0

您的答案適用於上面給出的兩個示例。但是我有很多需要解析的字符串。查看我更新過的一般預期結果。您的此解決方案無法與Select @vStr ='; 1GALQR,20111,19727328849,0,0,0,0,0,0,0,583424:' –