sql >> データベース >  >> RDS >> Sqlserver

値のペアを分割し、UDF を使用してテーブルを作成する

    CREATE FUNCTION [dbo].[SplitWithPairs]
    (
        @List NVARCHAR(MAX),
        @MajorDelimiter VARCHAR(3) = ',',
        @MinorDelimiter VARCHAR(3) = ':'
    )
    RETURNS @Items TABLE
    (
        Position  INT IDENTITY(1,1) NOT NULL,
        LeftItem  INT NOT NULL,
        RightItem INT NOT NULL
    )
    AS
    BEGIN
        DECLARE
            @Item      NVARCHAR(MAX),
            @LeftItem  NVARCHAR(MAX),
            @RightItem NVARCHAR(MAX),
            @Pos       INT;
    
        SELECT
            @List = @List + ' ',
            @MajorDelimiter = LTRIM(RTRIM(@MajorDelimiter)),
            @MinorDelimiter = LTRIM(RTRIM(@MinorDelimiter));
    
        WHILE LEN(@List) > 0
        BEGIN
            SET @Pos = CHARINDEX(@MajorDelimiter, @List);
    
            IF @Pos = 0 
                SET @Pos = LEN(@List) + LEN(@MajorDelimiter);
    
            SELECT
                @Item = LTRIM(RTRIM(LEFT(@List, @Pos - 1))),
                @LeftItem = LTRIM(RTRIM(LEFT(@Item,
                CHARINDEX(@MinorDelimiter, @Item) - 1))),
                @RightItem = LTRIM(RTRIM(SUBSTRING(@Item,
                CHARINDEX(@MinorDelimiter, @Item)
                + LEN(@MinorDelimiter), LEN(@Item))));
    
            INSERT @Items(LeftItem, RightItem)
                SELECT @LeftItem, @RightItem;
    
            SET @List = SUBSTRING(@List,
                @Pos + LEN(@MajorDelimiter), DATALENGTH(@List));
        END
        RETURN;
    END
    GO
    
    DECLARE @ValuePairs VARCHAR(MAX) = '1:1, 1:2, 1:4, 2:3,1000:230, 130:120,';
    
    SELECT LeftItem, RightItem
      FROM dbo.SplitWithPairs(@ValuePairs, ',', ':')
      ORDER BY Position;
    GO
    


    1. データベース列に複数のアイテムを保存するにはどうすればよいですか?

    2. java.lang.NoSuchFieldError:Spring 3、maven、JPA、c3p0で休止状態のNONE

    3. PostgreSQLの改行文字

    4. データベース設計で外部キーは本当に必要ですか?