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