如何在SQL中将一列拆分成多行?

时间:2015-07-02 08:07:55

标签: mysql sql

我有一张这样的桌子。

id  items
1  1|2|3
2  3|4
...

现在,我想将项目拆分为多行,如下所示。

id  item
1  1
1  2
1  3
2  3
2  4
...

SQL可以做这个工作吗?

1 个答案:

答案 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