Sql 从单元格值生成多行
我的SQL server中有一个名为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
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'。请帮助提供您将从中选择的表的示例,以及最终所需的输出。我对你们的结构一无所知,无法进一步阐述我的答案。