MySQL的substring_index函数到HGDB的迁移

Posted 瀚高PG实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的结果一致

以上是关于MySQL的substring_index函数到HGDB的迁移的主要内容,如果未能解决你的问题,请参考以下文章

MySQL字符串截取函数substring_index

使用mysql的SUBSTRING_INDEX函数解决项目中编码非重复问题的实现方案!

MySQL 字符串函数substring字符串截取substring_index

mysql 函数substring_index()

mysql函数substring_index的用法

mysql函数之SUBSTRING_INDEX(str,"/",-1)