从SQL Server中的逗号分隔字符串中提取字符串的一部分

时间:2016-03-15 06:20:40

标签: sql sql-server tsql sql-server-2008-r2

我在SQL Server中有一个varchar字符串:

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

我正在使用substringleft尝试len,但它无效。

更新

一般来说,我不想要这个逗号分隔字符串的前两部分,而且我也不想要逗号分隔字符串的最后部分。

2 个答案:

答案 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

的解释

  • 内部查询是排除最后一项。这是通过使用反转字符串(reverse())然后找到逗号","来完成的。然后使用LEFT()将左侧部分放到最后一个逗号

  • 外部查询的2个charindex()是找到第二个逗号

  • 然后使用stuff()
  • 删除第二个逗号

答案 1 :(得分:0)

你可以试试这个吗

select substring( substring (substring(@vStr,1,len(@vStr)),10,len(@vStr)),0,len(@vStr)-14 )
相关问题