我在SQL Server中有一个数据,如下所示
productid subproductid
--------- ----------------
1 1,2,3
我想要这样的输出:
productid subproductid
--------- ----------------
1 1
1 2
1 3
由于
答案 0 :(得分:1)
@controller
class Hello extends .... {
@RequestMapping("Home/Hello")
public .... sayHello() {
/* your code here
*/
}
}
答案 1 :(得分:0)
直到MSSQL SERVER 2014. STRING_SPLIT无效,
我做了什么,创建了一个返回列的拆分值的函数,并打印了它。
USE [Database name]
GO
/****** Object: UserDefinedFunction [dbo].[fnSplitString] Script Date: 4/28/2018 2:39:15 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[fnSplitString]
(
@string NVARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @output TABLE(splitdata NVARCHAR(MAX)
)
BEGIN
DECLARE @start INT, @end INT
SELECT @start = 1, @end = CHARINDEX(@delimiter, @string)
WHILE @start < LEN(@string) + 1 BEGIN
IF @end = 0
SET @end = LEN(@string) + 1
INSERT INTO @output (splitdata)
VALUES(SUBSTRING(@string, @start, @end - @start))
SET @start = @end + 1
SET @end = CHARINDEX(@delimiter, @string, @start)
END
RETURN
END
然后简单地调用该函数
select productId,f1.* from [TableName]
Cross apply(select * from fnSplitString(SubProductId,',') ) f1
此查询适用于我。它会对你有用。 感谢
答案 2 :(得分:0)
试试这个......
这个答案是基于Pildev Dave撰写的sqlauthority.com网站上的一篇文章 https://blog.sqlauthority.com/2015/04/21/sql-server-split-comma-separated-list-without-using-a-function/
SELECT productid,
Ltrim(Rtrim(m.n.value('.[1]', 'nvarchar(max)'))) AS subproductid
FROM (SELECT productid,
Cast('<XMLRoot><RowData>'
+ Replace(subproductid, ',', '</RowData><RowData>')
+ '</RowData></XMLRoot>' AS XML) AS x
FROM TableName) tbl
CROSS apply x.nodes('/XMLRoot/RowData')m(n)
输出
+-----------+--------------+
| productid | subproductid |
+-----------+--------------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
+-----------+--------------+