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