SQLServerで文字列をカンマ区切りにする方法
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で文字列をカンマ区切りにする方法」でした。









