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