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. Scalaz(43)- 总结 :FP就是实用的编程模式

    完成了对Free Monad这部分内容的学习了解后,心头豁然开朗,存在心里对FP的疑虑也一扫而光.之前也抱着跟大多数人一样的主观概念,认为FP只适合学术性探讨.缺乏实际应用.运行效率低,很难发展成现实 ...

  2. python 三级菜单

    三级列表: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, ...

  3. PHP 导出Excel 文档

    下面是总结的几个使用方法 include 'PHPExcel.php'; include 'PHPExcel/Writer/Excel2007.php'; //或者include 'PHPExcel/ ...

  4. python日志模块---logging

    1.将日志打印到屏幕 import logging logging.debug('This is debug message---by liu-ke') logging.info('This is i ...

  5. 决战大数据之三-Apache ZooKeeper Standalone及复制模式安装及测试

    决战大数据之三-Apache ZooKeeper Standalone及复制模式安装及测试 [TOC] Apache ZooKeeper 单机模式安装 创建hadoop用户&赋予sudo权限, ...

  6. Wrangle – 响应式的,触摸友好的多选插件

    Wrangle 是一个响应式,触摸友好的选择插件,支持 jQuery 以及 Zepto.Wrangle 为多项选择提供了一个独特的方法:通过画一条贯穿项目的线条来选择项目.它给你的应用程序的一种新的方 ...

  7. [应用][js+css3]3D盒子导航[PC端]

    CSS3构建的3D盒子之导航应用 1.在用css3构建的盒子表面,放上iframe,来加载导航页面. 2.鼠标左键按下移动可旋转盒子,寻找想要的网址. 3.左键单机盒子表面,将全屏现实所点盒子表面的网 ...

  8. 在线代码编辑器CodeMirror简介

    1.什么是Code Mirror 最近做一个项目需要在网页上实现一个代码编辑器,支持语法高亮.自动缩进.智能提示等功能.发现Code Mirror刚好满足所有需求.Code Mirror是由js写的一 ...

  9. SharePoint2013 错误

    英文错误信息: This operation can be performed only on a computer that is joined to a server farm by users ...

  10. 2016最新CocoaPods安装和错误解决 + 自己的经验

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 20.0px Times; color: #333333; background-color: #fffff ...