カテゴリー
Uncategorized

[Firebird] 文字列を分割する的な何か、str_split とか str.split みたいな

可変引数的な使い方をしたくて作った。

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です