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函数解决项目中编码非重复问题的实现方案!