2016-03-15 181 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:' –