转自:http://www.myexception.cn/operating-system/480929.html

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 $$
DECLAREpos integer;
BEGINpos:= 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 $$
DECLAREpos integer NOT NULL DEFAULT 0;temp_str varchar;beg integer;length integer;ss_length integer;
BEGINIF beg_index > 0 THENtemp_str := substring(string FROM beg_index);pos := position(string_to_search IN temp_str);IF pos = 0 THENRETURN 0;ELSERETURN pos + beg_index - 1;END IF;ELSEss_length := char_length(string_to_search);length := char_length(string);beg := length + beg_index - ss_length + 2;WHILE beg > 0 LOOPtemp_str := substring(string FROM beg FOR ss_length);pos := position(string_to_search IN temp_str);IF pos > 0 THENRETURN 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 $$
DECLAREpos integer NOT NULL DEFAULT 0;occur_number integer NOT NULL DEFAULT 0;temp_str varchar;beg integer;i integer;length integer;ss_length integer;
BEGINIF beg_index > 0 THENbeg := beg_index;temp_str := substring(string FROM beg_index);FOR i IN 1..occur_index LOOPpos := position(string_to_search IN temp_str);IF i = 1 THENbeg := beg + pos - 1;ELSEbeg := beg + pos;END IF;temp_str := substring(string FROM beg + 1);END LOOP;IF pos = 0 THENRETURN 0;ELSERETURN beg;END IF;ELSEss_length := char_length(string_to_search);length := char_length(string);beg := length + beg_index - ss_length + 2;WHILE beg > 0 LOOPtemp_str := substring(string FROM beg FOR ss_length);pos := position(string_to_search IN temp_str);IF pos > 0 THENoccur_number := occur_number + 1;IF occur_number = occur_index THENRETURN beg;END IF;END IF;beg := beg - 1;END LOOP;RETURN 0;END IF;
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE;


PostgreSQL仿照Oracle的instr函数相关推荐

  1. php instr函数,oracle的instr函数用法

    这几天在做一个项目的时候,做到关于用户组权限分配的问题,用到了Oracle的instr函数,现在好好学习下这个函数吧. 在Oracle/PLSQL中, instr 函数返回要截取的字符串在源字符串中的 ...

  2. oracle调用MySQL函数,Oracle的INSTR函数MySQL实现

    Oracle的INSTR函数MySQL实现 一个迁移项目遇到的,MySQL的instr函数只能查找子串是否在父串中,没法按照出现的次数进行查找.这里我自己写了一个,以便迁移.当然我这里仅仅针对的是迁移 ...

  3. java中instr函数,Oracle中instr函数使用方法

    INSTR (源字符串, 目标字符串, 起始位置, 匹配序号) 在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置.只检索一次,就是说从字符的开始到字符的结尾就结束. 语 ...

  4. Oracle的instr函数使用

    INSTR  instr(源字符串, 目标字符串, 起始位置, 匹配序号)  在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置.只检索一次,就是说从字符的开始  到字符 ...

  5. oracle的instr函数

    instr函数查找个字符串在另一个字符串中首次出现的位置.instr函数在Oracle/PLSQL中是返回要截取的字符串在源字符串中的位置. 一.语法 instr(string1, string2, ...

  6. oracle中的的instr,Oracle中instr函数使用方法

    举例: scenarioinfo 中有60条数据,其中字段ywwd不为空的有40条(其中包含"积分"的有30条),字段ywwd为空的有20条. 查询scenarioinfo 表中字 ...

  7. oracle中的to_number,Oracle中to_number()函数的用法

    to_number()函数是oracle中常用的类型转换函数之一,是将一些处理过的按一定格式编排过的字符串变回数值型的格式. 1.to_number()函数可以将char或varchar2类型的str ...

  8. 提高sql查询性能-使用instr函数替换like

    使用like查询时比较慢,使用oracle的instr函数可以提高查询的效率. 使用like: select f1.htbh as "htbh",f2.syqr as " ...

  9. java中instr函数_Oracle中instr函数使用方法

    Oracle中instr函数使用方法 更新时间:2012年11月03日 00:53:51   作者: 在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置.只检索一次,就是 ...

最新文章

  1. dmol3给定关键字不在字典中_python中的数据结构与算法(2):字典与集合
  2. jq处理 php数组,jQuery数组处理方法汇总_jquery
  3. 树状数组 区间update/query
  4. [游戏模版18] Win32 五子棋
  5. Kubernetes中分布式存储Rook-Ceph部署快速演练
  6. Jax-RS自定义异常处理
  7. 点击事件为什么会失效_Spring事务原理?事务在方法间如何传播?为什么会失效?...
  8. win7键盘失灵 登陆界面键盘失效无法输入密码的解决办法
  9. should, could, would, will, be going to, may, might到底有甚麼不同,又該怎麼用?
  10. 【Python - OpenCV】数字图像项目实战(四) - 位姿估计
  11. c++ - 虚函数表
  12. 用计算机怎么弹星辰大海,【计算机学院】你们的征途将是星辰大海~
  13. 华为防火墙IPSEC简单搭建
  14. 【清华大学陈渝】 第十一章_死锁
  15. 带轮轮毂长度l和带轮宽b表_V带轮宽度怎么计算?知道是A型带,带数为6,轮缘宽、轮彀孔径与长度怎么计算?顺求公式...
  16. 论文阅读利器——划词翻译插件(桌面与浏览器)
  17. Siemens Simcenter FloEFD 2021.2.0 for Catia V5
  18. 70个必备的数据分析工具
  19. Spotify网络钓鱼活动目标锁定音乐爱好者
  20. “35岁危机”不再,算法岗应届生平均月薪超3.2万,人工智能行业掀抢人大战!...

热门文章

  1. 医疗空气净化器系统测试
  2. 图文详解阿里云安装MySql数据库
  3. 同步读取文件和异步读取文件的区别
  4. springboot+mybatis启动报错:No suitable driver found for xxx
  5. CCF-小明种苹果【含C语言以及java语言】
  6. JS-向数组指定位置添加元素
  7. Ubuntu18.04网络图标不见了 火狐浏览器找不到服务器
  8. 图片内数字的切分与识别,
  9. 上市公司的工程师,水平怎么样?看看这个案例
  10. markdown 如何书写 arg min max公式