SQLServerで文字列をカンマ区切りにする方法

2018-12-19SQLServer

SQLServerで指定された文字列をカンマ区切りにする方法です。
※SQL Server 2016以降では「STRING_SPLIT」という関数が実装されています

SQLServerで文字列をカンマ区切りにする方法

SQLServerで文字列をカンマ区切りにする方法は文字列内のカンマをCHARINDEX関数で探しながら「カンマからカンマまで」をSUBSTRING関数で切り出してテーブル関数の戻り値に挿入していきます。
(idは切り出した順序でソートする場合に利用できるように連番を振っておきます。)

CREATE  FUNCTION dbo.splitString
(
    @target AS VARCHAR( MAX )
)  
RETURNS @Output TABLE( id int ,val VARCHAR( MAX ))
AS
BEGIN
    IF @target IS NOT NULL AND @target != ''
    BEGIN
        DECLARE @start_pos    INT = 1
        DECLARE @end_pos      INT = CHARINDEX( ',', @target )
        DECLARE @str_len      INT = LEN( @target )
        DECLARE @cnt          INT = 1

        WHILE @end_pos > 0
        BEGIN
            INSERT INTO @Output ( id, val ) VALUES( @cnt, SUBSTRING( @target, @start_pos, @end_pos - @start_pos ))

            SELECT    @start_pos = @end_pos + 1,@end_pos = CHARINDEX( ',', @target, @start_pos )
            SET @cnt = @cnt + 1

        END
        INSERT INTO @Output ( id, val ) VALUES( @cnt, SUBSTRING( @target, @start_pos, @str_len + 1 - @start_pos ))
        SET @cnt = @cnt + 1
    END
    RETURN
END

これで「123,456,789」という文字列を渡せば「123」「456」「789」という3行のデータが取得できます。

以上、「SQLServerで文字列をカンマ区切りにする方法」でした。