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;
PostgreSQL模仿Oracle的instr函数的更多相关文章
- 使用Oracle的instr函数与索引配合提高模糊查询的效率
使用Oracle的instr函数与索引配合提高模糊查询的效率 一般来说,在Oracle数据库中,我们对tb表的name字段进行模糊查询会采用下面两种方式:1.select * from tb wher ...
- Oracle中INSTR函数与SQL Server中CHARINDEX函数
Oracle中INSTR函数与SQL Server中CHARINDEX函数 1.ORACLE中的INSTR INSTR函数格式:INSTR(源字符串, 目标字符串, 起始位置, 匹配序号) 说明:返回 ...
- Oracle中instr 函数的详解
INSTR (源字符串, 目标字符串, 起始位置, 匹配序号) 在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置.只检索一次,就是说从字符的开始 到字 ...
- oracle中INSTR函数的用法
今天有个同学问我这个INSTR函数,我也不太清楚就上网查了查做一个小小的记录吧 INSTR(C1,C2,I,J) 在一个字符串中搜索指定的字符,返回发现指定的字符的位置; C1 被搜索的字符串 C2 ...
- oracle的instr()函数
我们知道很多语言都提供了indexOf()和lastIndexOf()函数,以便能查找某个字符在某个字符串中的出现的位置和最后一次出现的位置. 但是Oracle没有提供这两个函数,事实上,它提供了一个 ...
- oracle 中INSTR 函数和SUBSTR函数的使用
INSTR (源字符串, 目标字符串, 起始位置, 匹配序号) 在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置.只检索一次,就是说从字符的开始 到字符的结尾就结束. ...
- 【Oracle】instr()函数详解
1)instr()函数的格式 (俗称:字符查找函数) 格式一:instr( string1, string2 ) / instr(源字符串, 目标字符串) 格式二:instr( strin ...
- Oracle的instr函数
instr函数 instr(目标字符串,被匹配的字符串,搜索的开始位置默认是1,第几次被搜索到) 例子1: SQL> select ename,instr(ename,'L',1,1) from ...
- Oracle的instr()函数和substr()函数
INSTR()函数 可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符. 在一个字符串中查找指定的字符,返回被查找到的指定的字符的位置. 语法: instr(sourceString ...
随机推荐
- 调整 FMX Android 文字显示「锯齿」效果
说明:调整 Firemonkey Android 显示文字有「锯齿」效果 适用:Firemonkey Android 平台 修改方法: 请将源码 FMX.FontGlyphs.Android.pas ...
- 优秀的技术Leader
在一个"情怀"已经泛滥的年代里,任何拿着"情怀"出来说事的人都不太受待见.犀利者会吐槽:"我早已看穿了一切". 但你是否想过,如果这世界所有 ...
- Scalaz(40)- Free :versioned up,再回顾
在上一篇讨论里我在设计示范例子时遇到了一些麻烦.由于Free Monad可能是一种主流的FP编程规范,所以在进入实质编程之前必须把所有东西都搞清楚.前面遇到的问题主要与scalaz Free的Free ...
- GJM : Unity3D 常用网络框架与实战解析 【笔记】
Unity常用网络框架与实战解析 1.Http协议 Http协议 存在TCP 之上 有时候 TLS\SSL 之上 默认端口80 https 默认端口 ...
- el captain设置环境变量
这里说的不是设置变量给bash/shell来用, 而是给程序使用, 比如, chromium自36版以后, 就不再内置google api keys, 官方文档(http://www.chromium ...
- Webpack - CommonJs & AMD 模块打包器
Webpack 是一个 CommonJs & AMD 模块打包器.可以把你的 JavaScript 代码分离为多个包,在需要的时候进行加载,支持预处理文件,例如 json, jade, cof ...
- 15款美丽的设备模板,帮助展示你的 APP
有什么更好的方式来显示您的应用程序的外观和感觉呢?你看了这些设计示例之后就会有灵感了.无论是在 iPhone,iPad,Android,还是在桌面应用程序或网站,这些设计都增加了一些视觉上的吸引力,并 ...
- Trianglify - 生成五彩缤纷的 SVG 背景图案
Trianglify 是一个能够生成五颜六色的三角形图案的 JavaScript 库,可以用来作为 SVG 图像和 CSS 背景.它的灵感来自于 Btmills 的 Geopattern,并使用 d3 ...
- go语言 类型:复数类型
- git怎么创建本地版本仓库
git怎么创建本地版本仓库 安装git我就不用说了吧!下载地址:https://github.com/msysgit/msysgit/releases/download/Git-1.9.4-previ ...