我有以下字符串'3,45,543,6,89'。需要通过函数来输出像表格一样的结果,请帮我通过postgresql函数得到输出。请帮我通过postgresql函数获得输出。

问题描述 投票:0回答:1
CREATE OR REPLACE FUNCTION public.SplitToTable(
iv_datalist  varchar,iv_Separator varchar)
    RETURNS TABLE(out_param varchar)  
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE 
    ROWS 1000
AS $BODY$
BEGIN

RETURN query select (select regexp_split_to_table(iv_datalist, iv_Separator) as out_param );

END
$BODY$;

当我运行

select * from splitToTable('3,34,4,545,35,3',',');

我得到这个错误。

ERROR:  structure of query does not match function result type
DETAIL:  Returned type text does not match expected type character varying in column 1.
CONTEXT:  PL/pgSQL function splittotable1(character varying,character varying) line 4 at RETURN QUERY
SQL state: 42804
postgresql postgresql-9.5
1个回答
0
投票

你必须声明这个函数为 RETURNS text 而非 RETURNS varchar. 使用 text 因为在PostgreSQL中这是首选的字符串类型。这样一来,你就没有类型转换的问题了。

这个函数可以简单的写成

CREATE OR REPLACE FUNCTION public.SplitToTable(
   iv_datalist text,
   iv_Separator text
) RETURNS TABLE(out_param text)  
    LANGUAGE sql
    IMMUTABLE
AS
$BODY$SELECT * FROM regexp_split_to_table(iv_datalist, iv_Separator);$BODY$;

本质上,这个函数是无用的;你可以直接使用 regexp_split_to_table 直接。

© www.soinside.com 2019 - 2024. All rights reserved.