数据库
首页 > 数据库> > MySQL的substring_index函数到HGDB的迁移

MySQL的substring_index函数到HGDB的迁移

作者:互联网

目录
环境
文档用途
详细信息

环境
系统平台:Linux x86-64 Red Hat Enterprise Linux 7
版本:4.5
文档用途
MySQL中substring_index(str,delim,count)函数简介

str是要处理的字符串,delim是分隔符,count是计数。

如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容。

相反,如果是负数,那么就是从右边开始数,第N个分隔符右边的所有内容。

例如:

在这里插入图片描述

在HGDB中暂时不兼容该函数,为了不修改应用程序的代码,需要通过自定义substring_index函数实现。

详细信息
HGDB中的解决方案:自定义substring_index函数

CREATE OR REPLACE FUNCTION substring_index(inText text,inDelim text,inCount integer) RETURNS text AS 

--return text



$$

DECLARE

tArray text[];

intArrayLen integer;

textRet text := '';

intAbsCount integer;

BEGIN



--Null CHECK

IF inText IS NULL THEN

    return NULL;

END IF;

IF inCount = 0 THEN

    return '';

END IF;



tArray := string_to_array(inText,inDelim);

intArrayLen := array_length(tArray,1);

intAbsCount := abs(inCount);



--maxlength check

IF intAbsCount >= intArrayLen THEN

    return inText;

END IF;



--else

IF inCount > 0 THEN

    textRet := tArray[1];

    FOR i IN 2..inCount LOOP

         textRet := textRet || inDelim || tArray[i];

    END LOOP;

ELSE

    textRet := tArray[intArrayLen];

    FOR i IN 1..intAbsCount - 1 LOOP

         textRet := tArray[intArrayLen - i] || inDelim || textRet;

    END LOOP;

END IF;

return textRet;



END;

$$

LANGUAGE plpgsql;

修改后的执行结果:与MySQL的结果一致

在这里插入图片描述

标签:index,END,text,HGDB,textRet,substring,return,tArray
来源: https://blog.csdn.net/pg_hgdb/article/details/122367869