ニッチな内容で需要は少ないと思いますが・・・
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