--
-- instr functions that mimic Oracle's counterpart
-- Syntax: instr(string1, string2, [n], [m]) where [] denotes optional parameters.
--
-- Searches string1 beginning at the nth character for the mth occurrence
-- of string2. If n is negative, search backwards. If m is not passed,
-- assume 1 (search starts at first character).
--
CREATE FUNCTION instr(varchar, varchar) RETURNS integer AS $$
DECLARE
pos integer;
BEGIN
pos:= instr($1, $2, 1);
RETURN pos;
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE;
CREATE FUNCTION instr(string varchar, string_to_search varchar, beg_index integer)
RETURNS integer AS $$
DECLARE
pos integer NOT NULL DEFAULT 0;
temp_str varchar;
beg integer;
length integer;
ss_length integer;
BEGIN
IF beg_index > 0 THEN
temp_str := substring(string FROM beg_index);
pos := position(string_to_search IN temp_str);
IF pos = 0 THEN
RETURN 0;
ELSE
RETURN pos + beg_index - 1;
END IF;
ELSE
ss_length := char_length(string_to_search);
length := char_length(string);
beg := length + beg_index - ss_length + 2;
WHILE beg > 0 LOOP
temp_str := substring(string FROM beg FOR ss_length);
pos := position(string_to_search IN temp_str);
IF pos > 0 THEN
RETURN beg;
END IF;
beg := beg - 1;
END LOOP;
RETURN 0;
END IF;
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE;
CREATE FUNCTION instr(string varchar, string_to_search varchar,
beg_index integer, occur_index integer)
RETURNS integer AS $$
DECLARE
pos integer NOT NULL DEFAULT 0;
occur_number integer NOT NULL DEFAULT 0;
temp_str varchar;
beg integer;
i integer;
length integer;
ss_length integer;
BEGIN
IF beg_index > 0 THEN
beg := beg_index;
temp_str := substring(string FROM beg_index);
FOR i IN 1..occur_index LOOP
pos := position(string_to_search IN temp_str);
IF i = 1 THEN
beg := beg + pos - 1;
ELSE
beg := beg + pos;
END IF;
temp_str := substring(string FROM beg + 1);
END LOOP;
IF pos = 0 THEN
RETURN 0;
ELSE
RETURN beg;
END IF;
ELSE
ss_length := char_length(string_to_search);
length := char_length(string);
beg := length + beg_index - ss_length + 2;
WHILE beg > 0 LOOP
temp_str := substring(string FROM beg FOR ss_length);
pos := position(string_to_search IN temp_str);
IF pos > 0 THEN
occur_number := occur_number + 1;
IF occur_number = occur_index THEN
RETURN beg;
END IF;
END IF;
beg := beg - 1;
END LOOP;
RETURN 0;
END IF;
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE;
分享到:
相关推荐
postgresql 兼容 oracle 函数, postgresql 兼容 oracle 函数,postgresql 兼容 oracle 函数, postgresql 兼容 oracle 函数
MySQL、PostgreSQL、Oracle比较; 数据库基础知识.ppt
PostgreSQL & Oracle-备份技术大比拼 PostgreSQL & Oracle-备份技术大比拼 PostgreSQL & Oracle-备份技术大比拼
个人完整的源码安装步骤,希望对你有用。亲测可用。Centos6.2下,以oracle_fdw驱动连接oracle数据实现读写操作
oracle 的常用函数,在oracle里有很多实用的函数,但是不容易被人记住。
PostgreSQL和Oracle区别,内容很详细哦!!!
1. 博客:PostgreSQL的学习心得和知识总结(六十七)|语法级自上而下完美实现MySQL数据库的 IF函数和IFNULL函数 的实现方案
PostgreSQL MySQL Oracle数据库设计优化完美攻略
PostgreSQL與Oracle跟SQL92 Standard的差異
支持多种数据源的nacos,包括mysql/postgresql/oracle/derby 版本号为1.4.2 对应的各个组件版本 springcloud version: 2020.0.1 springboot version: 2.4.2 springcloudalibaba version: 2021.1 需根据自身情况修改...
支持2万+汉字转拼音
PostgreSQl函数部分阅读笔记 关于函数部分在PostgreSQL中的实现问题的解释 聚集函数
《PostgreSQL的Window分析函数源码优化》 Window(窗口)函数作为关系数据库领域中内数据库分析技术的一种解决方案, 其精妙的语义特征使其能代替自连接和相关子查询等完成传统复杂查询功能,现已被广泛应用到互联网...
Oracle数据库使用分组函数来对数据进行聚集
介绍mysql,oracle,sqlserver2000,postgresql的连接方法,这些都是我的心得
在介绍PostgreSQL的时间函数之前,我们先来看一个问题: bill=# select now(),pg_sleep_for('5 second'),now(); now | pg_sleep_for | now ------------------------------+--------------+-----------------------...
Sqlserver、Oracle、MySql、PostgreSql、SqlLite常用数据库的对比 1、分页 2、时间函数 3、自增列 4、表名规范 5、字符串连接 6、变量定义 7、其它
postgresql 字符串函数 收集各种字符串操作函数postgresql 字符串函数 收集各种字符串操作函数
postgresql 实现c language外部函数调用,为了提高数据库信息安全及数据库性能,通过c language实现相关功能,并编译成动态链接库so方式,供数据库postgresql调用,在数据库端只见函数的实现接口,隐藏实现细节
PostgresSQL数据库安装orafce-3.3.0函数兼容程序包,适用于postgres9.6 或其它版本