INSTR (源字符串, 目标字符串, 起始位置, 匹配序号)

在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置。只检索一次,就是说从字符的开始到字符的结尾就结束。

语法如下:

instr( string1, string2 [, start_position [, nth_appearance ] ] )

参数分析:

string1

源字符串,要在此字符串中查找。

string2

要在string1中查找的字符串.

start_position

代表string1 的哪个位置开始查找。此参数可选,如果省略默认为1. 字符串索引从1开始。如果此参数为正,从左到右开始检索,如果此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引。

nth_appearance

代表要查找第几次出现的string2. 此参数可选,如果省略,默认为 1.如果为负数系统会报错。

注意:

如果String2在String1中没有找到,instr函数返回0.

示例:

SELECT instr('syranmo','s') FROM dual; -- 返回 1

SELECT instr('syranmo','ra') FROM dual; -- 返回 3

SELECT instr('syran mo','a',1,2) FROM dual; -- 返回 0

(根据条件,由于a只出现一次,第四个参数2,就是说第2次出现a的位置,显然第2次是没有再出现了,所以结果返回0。注意空格也算一个字符!)

SELECT instr('syranmo','an',-1,1) FROM dual; -- 返回 4

(就算是由右到左数,索引的位置还是要看‘an'的左边第一个字母的位置,所以这里返回4)

SELECT instr('abc','d') FROM dual; -- 返回 0

注:也可利用此函数来检查String1中是否包含String2,如果返回0表示不包含,否则表示包含。

对于上面说到的,我们可以这样运用instr函数。请看下面示例:

如果我有一份资料,上面都是一些员工的工号(字段:CODE),可是我现在要查询出他们的所有员工情况,例如名字,部门,职业等等,这里举例是两个员工,工号分别是'A10001′,'A10002′,其中假设staff是员工表,那正常的做法就如下:

SELECT code , name , dept, occupation FROM staff WHERE code IN ('A10001','A10002');

或者:

SELECT code , name , dept, occupation FROM staff WHERE code = 'A10001' OR code = 'A10002';

有时候员工比较多,我们对于那个'觉得比较麻烦,于是就想,可以一次性导出来么?这时候你就可以用instr函数,如下:

SELECT code , name , dept, occupation FROM staff WHERE instr('A10001,A10002',code)>0;

查询出来结果一样,这样前后只用到两次单引号,相对方便点。

还有一个用法,如下:

SELECT code, name, dept, occupation FROM staff WHERE instr(code, '001') > 0;

等同于

SELECT code, name, dept, occupation FROM staff WHERE code LIKE '%001%' ;

Oracle的instr函数使用实例

INSTR方法的格式为

INSTR(src, subStr,startIndex, count)

src: 源字符串

subStr : 要查找的子串

startIndex : 从第几个字符开始。负数表示从右往左查找。

count: 要找到第几个匹配的序号

返回值: 子串在字符串中的位置,第1个为1;不存在为0. (特别注意:如果src为空字符串,返回值为null)。

用法举例:

最简单的一种,查找l字符,首个l位于第3个位置。

SQL> select instr('hello,java world', 'l') from dual;

INSTR('HELLO,JAVAWORLD','L')

----------------------------

3

查找l字符,从第4个位置开始。

SQL> select instr('hello,java world', 'l', 4) from dual;

INSTR('HELLO,JAVAWORLD','L',4)

------------------------------

4

查找l字符,从第1个位置开始的第3个

SQL> select instr('hello,java world', 'l', 1, 3) from dual;

INSTR('HELLO,JAVAWORLD','L',1,

------------------------------

15

查找l字符,从右边第1个位置开始,从右往左查找第3个(也即是从左到右的第1个)

SQL> select instr('hello,java world', 'l', -1, 3) from dual;

INSTR('HELLO,JAVAWORLD','L',-1

------------------------------

3

找不到返回0

SQL> select instr('hello,java world', 'MM') from dual;

INSTR('HELLO,JAVAWORLD','MM')

-----------------------------

0

源字符为空字符串''的情况

java中instr函数,Oracle中instr函数使用方法相关推荐

  1. Oracle INSTR 用法 Oracle 字符串搜索函数 INSTR Oracle instr 函数和like模糊查询对比 Oracle INSTR 用法

            Oracle  INSTR 用法 Oracle 字符串搜索函数 INSTR Oracle instr 函数和like模糊查询对比  一.instr 函数 1.instr函数语法规则:i ...

  2. oracle中转换函数,Oracle中的转换函数

    Oracle中的转换函数有三个,分别为to_char(),to_date(),to_number() 1.to_char()的用法 格式化当前的日期时间 select sysdate,to_char( ...

  3. oracle中having作用,oracle中having与where的区别

    1.where 不能放在group by 的后面 2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE 3.WHERE 后面的条件中不能有聚集函 ...

  4. oracle中rowid列,Oracle中的rowid

    ROWID是ORACLE中的一个重要的概念.用于定位数据库中一条记录的一个相对唯一地址值.通常情况下,该值在该行数据插入到数据库表时即被确定且唯一.ROWID它是一个伪列,它并不实际存在于表中.它是O ...

  5. oracle关于字符串函数,Oracle字符串处理函数

    Oracle字符串处理函数 Oracle字符串处理函数 2008年10月18日 星期六 23:45 项目中有涉及存储过程对字符串的处理,所以就将在网上查找到的资料汇总,做一个信息拼接式的总结. 以下信 ...

  6. mysql中varchar与oracle中varchar2区别

    一.字符与字节关系 一)"字节"的定义 字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位. (二)"字符"的定义 ...

  7. oracle怎么用charindex,SQL中Charindex和Oracle中对应的函数Instr对比

    sql :charindex('字符串',字段)>0 charindex('administrator',MUserID)>0 oracle:instr(字段,'字符串',1,1) > ...

  8. oracle中正则表达式规则,Oracle中的正则表达式(及函数)详解

    1.概述 相信大家对正则表达式都不陌生,从linux下的命令到Java等编程语言,正则表达式无处不在,虽然我们实际使用的时候也并不一定太多,但是当我们要处理字符串时,它确实是一个强大的工具. 上一篇文 ...

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

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

最新文章

  1. input输入系统中是如何实现按键重复
  2. python爬虫项目教程_Python 爬虫速成教程,还有35个实战项目送给你
  3. OpenStack在keystone部分同步数据库报错Errno 13解决办法
  4. wuhan2020新型冠状病毒防疫信息收集平台社区版非正式发布
  5. 【纯技术贴】.NETStandard FreeSql v0.0.9 功能预览
  6. 实现tree系统命令
  7. python mysql 连接6_寒假学习进度-6(Python连接MySQL数据库)
  8. java铝轮_为速度而生 JAVA Fuoco铝合金气动公路
  9. VBA GetOpenFilename 方法
  10. 4K屏幕+5500万像素摄像头,以成未来手机的一大趋势
  11. 25个优秀的UI设计资源下载
  12. Cocos2d-x动作CCAction
  13. 7-6 What is a computer? (5 分)
  14. Android图形显示系统——下层显示1:基础知识与相关文件
  15. android 按钮变形动画,android-动画切换按钮
  16. 【老生谈算法】基于matlab的指纹处理和识别算法详解及程序源码——指纹识别算法
  17. 表格里面如何快捷给方框内打勾
  18. 点击修改按钮,将数据显示在弹层窗口中,利用ajax实现
  19. 联盟 (Alliances)
  20. python入门题库 赶紧来试试自己的水平吧

热门文章

  1. android 直接v4l2驱动,基於V4L2驅動程序的USB攝像頭Android(JNI)的編寫(三)
  2. 命令行里的方括号、尖括号是什么
  3. java cas 实现_Java CAS算法简介及简单模拟CAS算法
  4. mysql java 社工库_社工库源码搜集
  5. Pycharm专业版详细安装教程
  6. 自然语言处理(1)深度学习基础及其通用模板
  7. Liouville定理(实际上是Liouville第二定理)+切比雪夫定理
  8. Photoshop-添加杂色滤镜的两种方法
  9. 那年,我们一起演的年会节目
  10. 【HIT-计算机系统】ICS-Lab2 DataLab