Sql 从单元格值生成多行

Sql 从单元格值生成多行,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我的SQL server中有一个名为Item(varchar(max))的列,其中包含如下单元格数据: “1 | 2 | 3 | 4 | 5” 我希望输出为: 1 2 3 4 5 是否可以使用SQL Server Management Studio执行此操作。虽然我强烈建议将自己与分隔值分开,但如果必须使用它们,可以使用以下方法: 创建表格函数: CREATE FUNCTION dbo.splitStringByPipe (@string nvarchar(500)) RETURNS TABL

我的SQL server中有一个名为
Item(varchar(max))
的列,其中包含如下单元格数据:

“1 | 2 | 3 | 4 | 5”

我希望输出为:

1
2
3
4
5

是否可以使用SQL Server Management Studio执行此操作。

虽然我强烈建议将自己与分隔值分开,但如果必须使用它们,可以使用以下方法:

创建表格函数:

CREATE FUNCTION dbo.splitStringByPipe
(@string nvarchar(500))
RETURNS TABLE 
AS
RETURN 
(
 SELECT  
     Split.a.value('.', 'VARCHAR(100)') AS String  
 FROM  (SELECT  
         CAST ('<M>' + REPLACE(@string, '|', '</M><M>') + '</M>' AS XML) AS String) AS A CROSS APPLY String.nodes ('/M') AS Split(a)     
)
GO
SELECT * FROM dbo.splitStringByPipe('1|a|5|z|r')
  | String
1 | 1
2 | a
3 | 5
4 | z
5 | r
 Result 
-  1 -
-  2 -
-  3 -
-  4 - 
-  5 -
返回:

CREATE FUNCTION dbo.splitStringByPipe
(@string nvarchar(500))
RETURNS TABLE 
AS
RETURN 
(
 SELECT  
     Split.a.value('.', 'VARCHAR(100)') AS String  
 FROM  (SELECT  
         CAST ('<M>' + REPLACE(@string, '|', '</M><M>') + '</M>' AS XML) AS String) AS A CROSS APPLY String.nodes ('/M') AS Split(a)     
)
GO
SELECT * FROM dbo.splitStringByPipe('1|a|5|z|r')
  | String
1 | 1
2 | a
3 | 5
4 | z
5 | r
 Result 
-  1 -
-  2 -
-  3 -
-  4 - 
-  5 -
用于XML(SQL Server)

SELECT查询将结果作为行集返回。你可以选择 通过指定 查询中的XML子句


对这里有一个很好的参考,介绍了一系列分割字符串的方法:最好的解决方案是停止存储分隔值。它违反了1NF,与它一起工作非常痛苦。cf。对于SQL Server 2016,请使用
SELECT value FROM STRING_SPLIT('1 | 2 | 3 | 4 | 5','|')
Sir,我希望在收到所需输出后计数为'1'。请帮助提供您将从中选择的表的示例,以及最终所需的输出。我对你们的结构一无所知,无法进一步阐述我的答案。