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. BaseAdapter的getView()方法

    getView()是BaseAdapter的一个重要方法.为了研究getView()方法,使用了以下的类. // apk列表 class list_apk extends BaseAdapter{ p ...

  2. Java关键字用法及区别

    abstract 修饰词表明类或者成员方法具有抽象属性, 用于修饰类时 该类为抽象类 用于方法前 该方法为抽象方法. assert 用来进行程序调试 断言预判的意思. boolean 基本数据类型之一 ...

  3. 第 12 章 CSS 入门

    学习要点: 1.使用 CSS 2.三种方式 3.层叠和继承 主讲教师:李炎恢 本章主要探讨 HTML5 中 CSS(层叠样式表),它是用来对 HTML 文档外观的表现形式进行排版和格式化. 一.使用 ...

  4. MAC使用CocoaPods

    前言,還是那句話,按照濤叔下面畫黃色的步驟順序執行就好了 使用CocoaPods兩種方式:使用之前安裝的插件&命令行. 一.利用插件 1.創建項目后添加CocoaPods 2.在文本框中輸入如 ...

  5. Spring Security

    ntercept-url中access配置 IS_AUTHENTICATED_ANONYMOUSLY 允许匿名用户进入 IS_AUTHENTICATED_FULLY 允许登录用户进入 IS_AUTHE ...

  6. SSH免密码登录过程解析和实现

    SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用SSH 协议可以有效防止远程管理过程中的信息泄露问题. 从客户端来看,SSH提 ...

  7. Close与Dispose的区别

    Close与Dispose的区别: Close 是停业整顿,停业了,可以通过公关,再重开,物还是原来的物:只是关闭而已,没有释放真正的释放资源,可以重新打开:Close是关门Dispose是破产: D ...

  8. jQuery Danmmu Player 弹幕视频

    Danmmu Player是基于jQuery的弹幕视频插件.当在看视频的时候,同时发表自己的观点,这样很好的提高用户互动效果.其实也就是在视频界面上做一个滚动展示动画效果,这样的聊天互动视频效果我们叫 ...

  9. Photopile JS – 帮助你实现精致的照片堆叠效果

    Photopile JS 是模拟照片散布堆叠在一起的 JavaScript/jQuery 图片库.点击缩略图,照片会弹出放大 ,再次点击照片会返回.缩略图是可拖动的,允许照片深深的堆在一起而不被覆盖, ...

  10. 【CSS3】 CSS3:弹性盒子(Flex Box)

    Flex布局是什么 如何指定一个容器为Flex布局 Flex的基本语法 display flex-direction justify-content align-items flew-wrap ali ...