Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server分隔包含逗号的字符串_Sql Server_String_Comma - Fatal编程技术网

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

Sql server SQL Server分隔包含逗号的字符串,sql-server,string,comma,Sql Server,String,Comma,我对SQL Server有点问题 我有一个名为versionslist的专栏 此版本列表可以包含以下内容-> 'PVW3.50,UtP7.30,NTE8.39' 现在我想将PVW3.50、Utp7.30和NTE8.39分开,但我不知道如何告诉SQL Server逗号“,”是一个分隔符,它可以分割不同的版本 谢谢你的帮助 旧的标准xml解决方案: SELECT Split.a.value('.', 'NVARCHAR(max)') AS ID FROM (SELECT CAST ('<M&

我对SQL Server有点问题

我有一个名为versionslist的专栏

此版本列表可以包含以下内容->

'PVW3.50,UtP7.30,NTE8.39'
现在我想将PVW3.50、Utp7.30和NTE8.39分开,但我不知道如何告诉SQL Server逗号“,”是一个分隔符,它可以分割不同的版本

谢谢你的帮助

旧的标准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是逗号分隔的列表。

例如,您可以使用coalesce来连接表中记录中的一系列字符串

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

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

print @aa

您还可以通过创建用户定义的函数来实现这一点

功能:fn_Split

那么

输出


你可以给出你所需要的名字,而不是“CarName”。他想反过来。我认为如果他按原样取值,然后按他的要求分开,这是非常好的。我有没有办法不用任何其他语言就能做到这一点?我将在Navision中使用它,其他任何语言都需要另一个界面,这使得这些东西越来越多complicated@luke,另一种方式是在乌拉斯的回答中。
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  |
+----------+