SQLServerでSPLIT関数

1つの文字列に対して任意の区切り文字で分割し、テーブル型で返すテーブルファンクションです。

CREATE FUNCTION [CF_TAB_SPLIT_DELIMITER]
(
@nvcInputData NVARCHAR(MAX)
, @nvcDlm NVARCHAR(3)
)
RETURNS @RESULT_TAB TABLE (INDEX_NO INT, VALUE VARCHAR(MAX))
BEGIN
DECLARE @nvcWork NVARCHAR(MAX) = '';
DECLARE @DlmLen INT = LEN(@nvcDlm);
DECLARE @Query NVARCHAR(MAX);

WITH Split(strPos,endPos)
AS(
SELECT 0 AS strPos, CHARINDEX(@nvcDlm,@nvcInputData) AS endPos
UNION ALL
SELECT CAST(endPos AS INT)+@DlmLen AS strPos, CHARINDEX(@nvcDlm,@nvcInputData,endPos+@DlmLen) AS endPos
FROM Split
WHERE endPos > 0
)

INSERT INTO @RESULT_TAB
SELECT ROW_NUMBER() OVER (ORDER BY strPos)
, SUBSTRING(@nvcInputData,strPos,(CASE endPos WHEN 0 THEN LEN(@nvcInputData)+1 ELSE endPos END)-strPos) 
FROM Split
OPTION (MAXRECURSION 100) --MAX100まで

RETURN 
END

使用例

select * from dbo.CF_TAB_SPLIT_DELIMITER('aaa@bbb@@@ccc@ddd@@eee','@@');

結果

INDEX_NO VALUE
1 aaa@bbb
2 @ccc@ddd
3 eee

こんな感じ。

参考(っていうかほぼパクリです):
Split a string to a table using T-SQL | Ole Michelsen