1. --
  2. -- instr functions that mimic Oracle's counterpart
  3. -- Syntax: instr(string1, string2, [n], [m]) where [] denotes optional parameters.
  4. --
  5. -- Searches string1 beginning at the nth character for the mth occurrence
  6. -- of string2.  If n is negative, search backwards.  If m is not passed,
  7. -- assume 1 (search starts at first character).
  8. --
  9. CREATE FUNCTION instr(varchar, varchar) RETURNS integer AS $$
  10. DECLARE
  11. pos integer;
  12. BEGIN
  13. pos:= instr($1, $2, 1);
  14. RETURN pos;
  15. END;
  16. $$ LANGUAGE plpgsql STRICT IMMUTABLE;
  17. CREATE FUNCTION instr(string varchar, string_to_search varchar, beg_index integer)
  18. RETURNS integer AS $$
  19. DECLARE
  20. pos integer NOT NULL DEFAULT 0;
  21. temp_str varchar;
  22. beg integer;
  23. length integer;
  24. ss_length integer;
  25. BEGIN
  26. IF beg_index > 0 THEN
  27. temp_str := substring(string FROM beg_index);
  28. pos := position(string_to_search IN temp_str);
  29. IF pos = 0 THEN
  30. RETURN 0;
  31. ELSE
  32. RETURN pos + beg_index - 1;
  33. END IF;
  34. ELSE
  35. ss_length := char_length(string_to_search);
  36. length := char_length(string);
  37. beg := length + beg_index - ss_length + 2;
  38. WHILE beg > 0 LOOP
  39. temp_str := substring(string FROM beg FOR ss_length);
  40. pos := position(string_to_search IN temp_str);
  41. IF pos > 0 THEN
  42. RETURN beg;
  43. END IF;
  44. beg := beg - 1;
  45. END LOOP;
  46. RETURN 0;
  47. END IF;
  48. END;
  49. $$ LANGUAGE plpgsql STRICT IMMUTABLE;
  50. CREATE FUNCTION instr(string varchar, string_to_search varchar,
  51. beg_index integer, occur_index integer)
  52. RETURNS integer AS $$
  53. DECLARE
  54. pos integer NOT NULL DEFAULT 0;
  55. occur_number integer NOT NULL DEFAULT 0;
  56. temp_str varchar;
  57. beg integer;
  58. i integer;
  59. length integer;
  60. ss_length integer;
  61. BEGIN
  62. IF beg_index > 0 THEN
  63. beg := beg_index;
  64. temp_str := substring(string FROM beg_index);
  65. FOR i IN 1..occur_index LOOP
  66. pos := position(string_to_search IN temp_str);
  67. IF i = 1 THEN
  68. beg := beg + pos - 1;
  69. ELSE
  70. beg := beg + pos;
  71. END IF;
  72. temp_str := substring(string FROM beg + 1);
  73. END LOOP;
  74. IF pos = 0 THEN
  75. RETURN 0;
  76. ELSE
  77. RETURN beg;
  78. END IF;
  79. ELSE
  80. ss_length := char_length(string_to_search);
  81. length := char_length(string);
  82. beg := length + beg_index - ss_length + 2;
  83. WHILE beg > 0 LOOP
  84. temp_str := substring(string FROM beg FOR ss_length);
  85. pos := position(string_to_search IN temp_str);
  86. IF pos > 0 THEN
  87. occur_number := occur_number + 1;
  88. IF occur_number = occur_index THEN
  89. RETURN beg;
  90. END IF;
  91. END IF;
  92. beg := beg - 1;
  93. END LOOP;
  94. RETURN 0;
  95. END IF;
  96. END;
  97. $$ LANGUAGE plpgsql STRICT IMMUTABLE;

PostgreSQL模仿Oracle的instr函数的更多相关文章

  1. 使用Oracle的instr函数与索引配合提高模糊查询的效率

    使用Oracle的instr函数与索引配合提高模糊查询的效率 一般来说,在Oracle数据库中,我们对tb表的name字段进行模糊查询会采用下面两种方式:1.select * from tb wher ...

  2. Oracle中INSTR函数与SQL Server中CHARINDEX函数

    Oracle中INSTR函数与SQL Server中CHARINDEX函数 1.ORACLE中的INSTR INSTR函数格式:INSTR(源字符串, 目标字符串, 起始位置, 匹配序号) 说明:返回 ...

  3. Oracle中instr 函数的详解

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

  4. oracle中INSTR函数的用法

    今天有个同学问我这个INSTR函数,我也不太清楚就上网查了查做一个小小的记录吧 INSTR(C1,C2,I,J) 在一个字符串中搜索指定的字符,返回发现指定的字符的位置; C1 被搜索的字符串 C2  ...

  5. oracle的instr()函数

    我们知道很多语言都提供了indexOf()和lastIndexOf()函数,以便能查找某个字符在某个字符串中的出现的位置和最后一次出现的位置. 但是Oracle没有提供这两个函数,事实上,它提供了一个 ...

  6. oracle 中INSTR 函数和SUBSTR函数的使用

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

  7. 【Oracle】instr()函数详解

    1)instr()函数的格式  (俗称:字符查找函数) 格式一:instr( string1, string2 )    /   instr(源字符串, 目标字符串) 格式二:instr( strin ...

  8. Oracle的instr函数

    instr函数 instr(目标字符串,被匹配的字符串,搜索的开始位置默认是1,第几次被搜索到) 例子1: SQL> select ename,instr(ename,'L',1,1) from ...

  9. Oracle的instr()函数和substr()函数

    INSTR()函数 可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符. 在一个字符串中查找指定的字符,返回被查找到的指定的字符的位置. 语法: instr(sourceString ...

随机推荐

  1. 用Apache 里面的ab做一个简单的压力测试

    我用的是xampp环境包. D:\xampp\apache\bin 进入这路径, 找到ab.exe  尝试双击打开ab.exe 但不能如愿, 这两个都是一个压力的测试软件, 是apache自带的; 好 ...

  2. Linux命令详解之—less命令

    Linux下还有一个与more命令非常类似的命令--less命令,相比于more命令,less命令更加灵活强大一些,今天就给大家介绍下Linux下的less命令. 更多Linux命令详情请看:Linu ...

  3. GJM :FPSCalc-简单FPS观测类 [转载]

    版权声明:本文原创发表于 [请点击连接前往] ,未经作者同意必须保留此段声明!如有侵权请联系我删帖处理! FPSCalc--简单FPS观测类 利用Unity做的手游项目很多时候要保证流畅度,流畅度最直 ...

  4. servlet的开发流程介绍

    servlet的开发部署流程 1.在%TOMCAT_HOME%/webapps下WEB-INF的文件夹,写一个文件web.xml(该网站的配置信息),建立一个classes的子文件夹,也可以从别的目录 ...

  5. Community Value再理解

    其实之前写“从香港机房引入google/bitbucket路由”的时候,对community value的了解还并不深入,对Juniper default BGP export/import poli ...

  6. CSS中兼容的一面-----Hack

    国庆了,出去玩耍,也有好长时间没有更新博客了.. 今天就和大家共享一篇技术博文吧.. CSS中兼容的一面-----Hack技术大全 兼容范围: IE:6.0+,FireFox:2.0+,Opera 1 ...

  7. JavaScript数组与对象的关系

    JavaScript的数组,相比其他语言,是比较特殊的.数组是Object类型,只不过,有几个比较特殊的地方: 有索引下标 有默认的length属性 是有序的(注意,对象是无序的) 可以使用一些特殊的 ...

  8. [GitHub] GitHub Repositories

    https://github.com/karqical2016/karqical2016.github.io.git https://github.com/karqical2016/java.git ...

  9. mysql 时间函数转换

    1 NOW() //当前时间 2 SYSDATE() //当前时间 3 CURRENT_TIMESTAMP 4 以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的 ...

  10. 微信公众号里打开链接下载APP

    嵌入这样的代码 <a href="http://a.app.qq.com/o/simple.jsp?pkgname=com.violationquery" target=&q ...