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. Delphi 10 Seattle Update 1 修复 iOS HTTP 协定需求

    在 iOS 9 Apple 加入了 HTTP 协议,还好有 TMS 提供快速修复工具,得以能顺利上架到 App Store. 现在 Delphi 10 Seattle Update 1 提供了这个设定 ...

  2. idea配置maven并添加镜像配置

    1.打开maven存放文件夹找到 conf ->settings.xml 找到<mirrors>节点把下面内容写入节点内 配置为阿里云的镜像 <mirror> <i ...

  3. JS疑难点和GC原理

    js解析与序列化json数据(一)json.stringify()的基本用法: 对象有两个方法:stringify()和parse().在最简单的情况下,这两个方法分别用于把JavaScript对象序 ...

  4. Java基础复习笔记系列 十三 反射机制

    主题:Java反射机制 学习资料参考网址: 1.http://www.icoolxue.com 1.Java反射机制. 各种框架中都使用到了Java的反射机制. 两个类:java.lang.Class ...

  5. 容器--HashMap

    一.前言 看了下上一篇博客已经是半个月前,将近20天前了,很惭愧没有坚持下来,这期间主要是受奥运会和王宝强事件的影响,另外加上HashMap中关于rehash的实现比较不好理解,所以就一拖再拖.如果能 ...

  6. 树链剖分求LCA

    树链剖分中各种数组的作用: siz[]数组,用来保存以x为根的子树节点个数 top[]数组,用来保存当前节点的所在链的顶端节点 son[]数组,用来保存重儿子 dep[]数组,用来保存当前节点的深度 ...

  7. 2013年最新流行的响应式 WordPress 主题【上篇】

    WordPress 是最流行的内容管理系统,经历了多年的发展和演变.它的成功体现在庞大的社区,数百万的用户,设计师和开发者推动着 WordPress 往更高的层次发展. 海量的免费主题是 WordPr ...

  8. Clipboard.js – 现代方式实现复制文本到剪贴板

    复制文本到剪贴板应该并不难,目前已经有很成熟的 Flash 方法.但是 Flash 已经在很多场合不适用了,特别是随着 HTML5 技术的发展.今天推荐的这个 Clipboard.js 库不依赖 Fl ...

  9. 【经验之谈】前端面试知识点总结(CSS相关)——附答案

    目录 二.CSS部分 1.解释一下CSS的盒子模型? 2.请你说说CSS选择器的类型有哪些,并举几个例子说明其用法? 3.请你说说CSS有什么特殊性?(优先级.计算特殊值) 4.要动态改变层中内容可以 ...

  10. 分享11个纯css完成的图片浏览器

    图片画廊用于在网站上显示系列图片,它已成为网站重要的组成部分.实现图片画廊有很多种方法,今天要与大家分享的是11个使用纯 CSS 实现的图片画廊,它们代码少,效果炫,加载速度快,希望能对大家有所帮助. ...