カンマ区切りを分割するユーザー関数【MSSQL】 | 社内ITゲリラがWebで世界をめざす

社内ITゲリラがWebで世界をめざす

ITを仕事に活かし媚びないサラリーマン生活を、さらに別世界(Web/海外)に拠点を築くことでサバイバル力Upを目指す。Webの可能性を信じ、サービス立ち上げ等画策していきます。

ニッチな内容で需要は少ないと思いますが・・・
SQL Server 2005でのユーザー関数です。

DBのレコード中にカンマ区切り(CSV)のデータが含まれている場合、

例)10,20,30,40

区切られた値を、それぞれ独自の列として取り出したいと思います。


カンマ区切りの2番めの値 を出したい場合、下記の様に使用します。

SELECT dbo.SplitCsv(col1,2)  FROM table1

-----------------------------------------------------

CREATE FUNCTION [dbo].[SplitCsv] (@str nvarchar(2000), @num int)

RETURNS nvarchar(100)
AS
BEGIN
DECLARE @position int, @str2 nvarchar(2000)

IF CHARINDEX(',', @str) = 0 AND @num = 1
    --区切りがない場合はそのまま返す
    RETURN @str
IF CHARINDEX(',', @str) = 0 AND @num <> 1
    RETURN ''

SET @position = 1
SET @str2 = @str
    WHILE @position <= @num
        BEGIN
            IF CHARINDEX(',', @str2) = 0 AND @position < @num
                RETURN ''
            IF CHARINDEX(',', @str2) = 0
                BREAK
            IF @position = @num
                --BREAK
                RETURN SUBSTRING(@str2,0,CHARINDEX(',',@str2))
            SET @str2 = SUBSTRING(@str2, CHARINDEX(',',@str2)+1,LEN(@str2)+1 )
            --左端カンマ以前を除去
            SET @position = @position + 1
        END

RETURN @str2
END