【发布时间】:2015-01-24 17:50:39
【问题描述】:
我有一个这样的 PL/pgSQL 函数(感谢使这成为可能的人):
CREATE OR REPLACE FUNCTION public.split_string(text, text)
RETURNS SETOF text
LANGUAGE plpgsql
AS $function$
DECLARE
pos int;
delim_length int := length($2);
BEGIN
WHILE $1 <> ''
LOOP
pos := strpos($1,$2);
IF pos > 0 THEN
RETURN NEXT substring($1 FROM 1 FOR pos - 1);
$1 := substring($1 FROM pos + delim_length);
ELSE
RETURN NEXT $1;
EXIT;
END IF;
END LOOP;
RETURN;
END;
$function$
它用分隔符分割字符串。像这样:
select * from split_string('3.584731 60.739211,3.590472 60.738030,3.592740 60.736220', ' ');
"3.584731"
"60.739211,3.590472"
"60.738030,3.592740"
"60.736220"
如何将结果保存在 temp_array 或 temp_table 中。所以我可以在 temp_x 中得到结果并再次拆分这些点。喜欢:
"3.584731"
"60.739211"
"3.590472"
"60.738030"
"3.592740"
"60.736220"
并将值返回为double precision。而这一切都应该在函数中完成。
【问题讨论】:
-
你的 Postgres 版本对于这样的问题是必不可少的。另外,请提供您认为需要 plpgsql 的理由。
标签: postgresql plpgsql set-returning-functions