PostgreSQL模仿Oracle的instr函数:
--
-- 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;
参考网站:
http://www.dbaref.com/postgresql-database/instrfunctioninpostgresql
http://www.postgresql.org/docs/9.1/static/plpgsql-porting.html
http://www.postgresql.org/docs/7.4/static/plpgsql-porting.html#PLPGSQL-PORTING-APPENDIX
分享到:
相关推荐
2. **字符串函数**:诸如 INITCAP、SUBSTR、INSTR等在PostgreSQL中也有相应的实现,方便进行字符串操作。 3. **数学和转换函数**:如ROUND、TRUNC、TO_CHAR、TO_DATE等,这些在数据转换和计算中十分常用。 4. **...
本话题主要关注的是如何在Oracle数据库向PostgreSQL迁移过程中处理Oracle特有的函数,这里我们提到了一个名为"orafce"的工具。 orafce,全称为“Oracle Functions for PostgreSQL”,是一个开源项目,它为...
- **INSTR函数**: - **Oracle**: 使用 `instr('str1','str2')` 查找子字符串的位置。 - **PostgreSQL**: 使用 `strpos('str1','str2')` 实现相同功能。 - **NVL函数**: - **Oracle**: 使用 `NVL` 函数来处理 `...
PostgreSQL 号称“世界上最先进的开源数据库“,可以运行在多种平台下,是tb级数据库,而且性能也很好 中大型企业 oracle 甲骨文 获得最高认证级别的ISO标准安全认证,性能最高, 保持开放平台下的TPC-D和TPC-C的...
5. **INSTR函数**:某些数据库系统提供了INSTR函数,它可以在字符串中查找子串的位置,这对于模式查找也很有用。 6. **正则表达式函数**:如`REGEXP`或`RLIKE`,这些函数在某些数据库系统中用于执行正则表达式匹配...
- **INSTR**:在某些数据库系统中,如Oracle,可以使用 `INSTR` 函数来查找子串位置。 5. **字符串转换** - **UPPER** 和 **LOWER**:将字符串转换为大写或小写。 - **TRIM**:去除字符串首尾的空格,有的系统还...
- **Oracle SQL Developer**:Oracle公司的免费工具,用于管理Oracle数据库。 #### 三、SQL在编程中的应用 - **SQL与编程语言集成**:现代编程语言通常提供了与SQL集成的功能,如Python中的`psycopg2`库用于连接...
- Oracle SQL Developer - Microsoft SQL Server Management Studio - MySQL Workbench - PostgreSQL pgAdmin - SQLiteStudio - **SQL在编程中的应用:** - SQL常用于应用程序中进行数据的检索、更新等操作。...
- **字符函数**:`CHR`、`CONCAT`、`INITCAP`、`LOWER`、`UPPER`、`LPAD`、`RPAD`、`LTRIM`、`RTRIM`、`REPLACE`、`SUBSTR`、`TRANSLATE`、`INSTR`、`LENGTH`等,用于字符串操作。 - **转换函数**:`TO_CHAR`、`TO_...
- Oracle SQL Developer - MySQL Workbench - SQL Server Management Studio - pgAdmin (PostgreSQL) #### 第二天:查询——SELECT语句的使用 - **目标**:掌握SELECT语句的基本语法及其功能。 - **背景**:...
- **pgAdmin**:PostgreSQL的一个开源管理工具,功能强大且用户友好。 #### SQL在编程中的应用 - **应用场景**: - **Web开发**:通过服务器端脚本语言(如PHP、Python、Java等)与数据库交互。 - **桌面应用...
- Oracle SQL Developer:免费的图形化工具,支持多种数据库。 - MySQL Workbench:MySQL官方提供的集成开发环境。 - Microsoft SQL Server Management Studio:适用于SQL Server的强大工具。 - pgAdmin:...
- Oracle SQL Developer - MySQL Workbench - Microsoft SQL Server Management Studio (SSMS) - PostgreSQL’s pgAdmin - SQLiteStudio - **SQL在编程中的应用**:SQL常被用于网页应用程序、数据分析等领域。 ...