我有一张这样的桌子。
id items
1 1|2|3
2 3|4
...
现在,我想将项目拆分为多行,如下所示。
id item
1 1
1 2
1 3
2 3
2 4
...
SQL可以做这个工作吗?
答案 0 :(得分:-1)
由于索引使用等原因,您不应该以这种格式将数据存储在数据库中。但在某些情况下,如果外国应用程序以这种方式传递信息,则无法避免。如果你必须以这种方式存储它并将其分解以便以良好的格式存储它,你可以使用以下用户定义的函数来实现它。
CREATE FUNCTION dbo.udf_split (@String nvarchar(max), @Delimiter nchar(1))
RETURNS @Results Table (Items nvarchar(max))
AS
BEGIN
DECLARE @Index int
DECLARE @Slice nvarchar(max)
SET @Index = 1
IF @String IS NULL RETURN
WHILE @Index != 0
BEGIN
SELECT @Index = CHARINDEX(@Delimiter, @String)
IF @Index != 0
SELECT @Slice = LEFT(@String, @Index - 1)
ELSE
SELECT @Slice = @String
INSERT INTO @Results(Items) VALUES (LTRIM(RTRIM(@Slice)))
SELECT @String = RIGHT(@String, LEN(@String) - @Index)
IF Len(@String) = 0 BREAK
END
RETURN
END
GO