我具有以下结构的数据
ID Sub_ID
123 '1;2;3'
我想创建一个具有以下结构的表
ID Sub_ID
123 1
123 2
123 3
是否可以在Microsoft SQL Server上处理此任务?
THX 拉兹鲁(Lazloo)
答案 0 :(得分:2)
如果您使用的是SQL Server 2016或更高版本,则STRING_SPLIT
是此处的一种选择:
WITH cte AS (
SELECT ID, value
FROM yourTable
CROSS APPLY STRING_SPLIT(Sub_ID, ';')
)
SELECT *
FROM cte
ORDER BY value;
如果您使用的是SQL Server的早期版本,请here is a link回答一个可以帮助您的规范SO问题。如果您长期有此需要,请考虑升级。
答案 1 :(得分:0)
如果您的SQL Server 2016版本较旧,则需要创建自己的拆分函数:
CREATE FUNCTION [dbo].[Tbl_Fn_Split](
@InputText VARCHAR(8000)
, @Delimiter VARCHAR(8000) = ' ' -- delimiter that separates items
) RETURNS @List TABLE (Result VARCHAR(8000))
BEGIN
DECLARE @aResult VARCHAR(8000)
WHILE CHARINDEX(@Delimiter,@InputText,0) <> 0
BEGIN
SELECT
@aResult=RTRIM(LTRIM(SUBSTRING(@InputText,1,CHARINDEX(@Delimiter,@InputText,0)-1))),
@InputText=RTRIM(LTRIM(SUBSTRING(@InputText,CHARINDEX(@Delimiter,@InputText,0)+LEN(@Delimiter),LEN(@InputText))))
IF LEN(@aResult) > 0
INSERT INTO @List SELECT @aResult
END
IF LEN(@InputText) > 0
INSERT INTO @List SELECT @InputText
RETURN
END
然后您可以使用CROSS APPLY将其与查询一起使用:
SELECT * FROM tTable T
CROSS APPLY (SELECT * FROM [dbo].[Tbl_Fn_Split](T.Sub_Id,';')) S