GP(GreenPlumn)数据库,自定义函数function,实现类Oracle的instr函数功能

GreenPlumn(下称GP)中原生不自带instr函数,导致一些场景下的困境,笔者使用GP的自定义函数功能实现instr。代码如下(python实现):

/* 函数名称:f_instr
*  入参:datas    要进行instr操作的字段,字符串类型
*        sep      查找的目标字符,字符类型
*        strfrom  从datas参数的哪一位开始查起(返回计算结果不包含该位)
*        whichpos 匹配多少个sep(若该参数指定的sep个数不够,则返回-1)
* 返回值类型:int 
* 返回值示例:5
* 函数功能概述:实现类似Oracle中instr()的功能。
* 本函数接收四个参数,用于定位指定并返回指定字符串中某个字符的位置索引,若
* 未找到,返回-1
*/
CREATE OR REPLACE FUNCTION f_instr(datas text, sep text, strfrom int,whichpos int)
RETURNS int AS
$BODY$
v_deal_datas = datas[strfrom:]
v_target_cnt = 0
if sep in v_deal_datas:
	for i in range(0,len(v_deal_datas)):
		if str(v_deal_datas[i]) == sep:
			v_target_cnt = v_target_cnt + 1
			if v_target_cnt == whichpos:
				return i+1+strfrom
	else:
		return -1
return -1
$BODY$
LANGUAGE plpythonu VOLATILE;
ALTER FUNCTION f_instr(text, text, int, int) owner to dw;

效果如下:
函数执行结果示例

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值