SQL Server分隔包含逗号的字符串

时间:2015-11-04 10:10:56

标签: sql-server string comma

我对SQL Server有点问题。

我有一个名为"versionslist"的专栏。

这个versionslist可以包含这样的内容 - >

'PVW3.50,UtP7.30,NTE8.39'

现在我希望将PVW3.50 and Utp7.30 and NTE8.39分开,但我不知道如何告诉SQL Server逗号','是一个分隔符并且它分割了不同的版本。

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

旧标准xml解决方案:

SELECT Split.a.value('.', 'NVARCHAR(max)') AS ID
FROM (SELECT CAST ('<M>' + REPLACE(@List, ',', '</M><M>') + '</M>' AS XML) AS Data) AS A
CROSS APPLY Data.nodes('/M') AS Split ( a )

此处@List是逗号分隔列表。

答案 1 :(得分:0)

例如,您可以使用coalesce来创建一个快捷方式来连接表中记录的一系列字符串。

declare @aa varchar (200)
set @aa = ''

select @aa = 
    coalesce (case when @aa = ''
                   then CarName
                   else @aa + ',' + CarName
               end
              ,'')
  from Cars

print @aa

答案 2 :(得分:0)

您还可以通过创建用户定义的函数来实现此目的。

功能:fn_Split

CREATE FUNCTION [dbo].[fn_Split](@text varchar(8000), @delimiter varchar(20) = ' ')
RETURNS @Strings TABLE
(   
   position int IDENTITY PRIMARY KEY,
   value varchar(8000)  
)
AS
BEGIN

DECLARE @index int
SET @index = -1

WHILE (LEN(@text) > 0)
  BEGIN 
    SET @index = CHARINDEX(@delimiter , @text) 
    IF (@index = 0) AND (LEN(@text) > 0) 
      BEGIN  
        INSERT INTO @Strings VALUES (@text)
          BREAK 
      END 
    IF (@index > 1) 
      BEGIN  
        INSERT INTO @Strings VALUES (LEFT(@text, @index - 1))  
        SET @text = RIGHT(@text, (LEN(@text) - @index)) 
       END 
     ELSE
       SET @text = RIGHT(@text, (LEN(@text) - @index))
    END
  RETURN
END

然后,

DECLARE @versions AS VARCHAR(MAX) = 'PVW3.50,UtP7.30,NTE8.39'

SELECT Value AS Versions FROM fn_Split(@versions,',');

<强>输出

+----------+
| Versions |
+----------+
| PVW3.50  |
| UtP7.30  |
| NTE8.39  |
+----------+