可変引数的な使い方をしたくて作った。
SQL は単体で動かす分にはいいけど(それだけで使い物になるわけ無いが)、プログラミング言語から叩くと途端に泥臭くなるから困る。
長さ? 可変長文字列型くらい用意しとけよ今時…
SET TERM !! ; CREATE PROCEDURE str_split( string VARCHAR(252) CHARACTER SET UNICODE_FSS, sep VARCHAR(252) CHARACTER SET UNICODE_FSS DEFAULT ' ', maxsplit INTEGER DEFAULT 126 ) RETURNS( result VARCHAR(252) CHARACTER SET UNICODE_FSS ) AS DECLARE VARIABLE p INTEGER; DECLARE VARIABLE n INTEGER; BEGIN n = 0; WHILE (string <> '') DO BEGIN p = POSITION(sep, string); IF (p = 0 OR n >= maxsplit) THEN p = CHAR_LENGTH(string); ELSE p = p - 1; result = SUBSTRING(string FROM 1 FOR p); SUSPEND; string = SUBSTRING(string FROM p + 2); n = n + 1; END END !! SET TERM ; !! SELECT * FROM str_split('a,b,c', ',');
RESULT =============================================================================== a b c