Postgresql动态函数使用any,regexp_split_to_array,string_to_array

本文介绍了如何使用SQL函数fun_parse_param,通过regexp_split_to_array和string_to_array进行数据解析,比较了in和any的用法,并展示了三种实现方法。重点讲解了PL/pgSQL中的数组操作和SQL查询技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面函数为根据入参查询符合的数据

  • regexp_split_to_array 是将分隔的数据转成数组
  • string_to_array 将字符串转换成数组
  • 从逻辑上看,in和any的用法一样。但是any取的是一个set,括号里是数组(必须是实际的数组类型);in取的是一个集合,是逗号分隔的值列表。
    例如:
    SELECT ‘1’ = ANY (ARRAY[‘1’, ‘2’]) ;
    SELECT ‘1’ in (‘1’,‘2’) ;
 CREATE OR REPLACE FUNCTION fun_parse_param(p_classid text, p_paramno text)
 RETURNS text                                                              
 LANGUAGE sql
AS $function$
 SELECT string_agg(FPARAMVALUE,',')
     FROM T_SYSTEMCONFIG
   WHERE FCLASSID = $1
      AND FPARAMNO = any(regexp_split_to_array($2, ','));
$function$;


方法二:
CREATE OR REPLACE FUNCTION fun_parse_param(
	p_classid text,
	p_paramno text)
    RETURNS text
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
AS $BODY$
DECLARE
    V_PARAMVALUE text;
    sqlstring text;
 BEGIN
  sqlstring:= 'SELECT string_agg(FPARAMVALUE,'','')
     FROM T_SYSTEMCONFIG
   WHERE FCLASSID = '''||p_classid||'''
      AND FPARAMNO = any(regexp_split_to_array('''||p_paramno||''', '',''));';
    EXECUTE sqlstring into V_PARAMVALUE;  
RETURN V_PARAMVALUE;
END;
$BODY$;
 
--方法三:
CREATE OR REPLACE FUNCTION fun_parse_param(
	p_classid text,
	p_paramno text)
    RETURNS text
    LANGUAGE 'plpgsql' 
    as $BODY$ 
DECLARE
    V_PARAMVALUE text;
BEGIN
 SELECT string_agg(FPARAMVALUE,',')
     into STRICT V_PARAMVALUE
     FROM T_SYSTEMCONFIG
   WHERE FCLASSID = P_CLASSID
      AND FPARAMNO = any(string_to_array(p_paramno,','));
      return V_PARAMVALUE;
END;
$BODY$ 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值