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. 软件测试培训分享:性能测试的目的是什么
  2. 《Redis官方文档》用Redis构建分布式锁
  3. java继承对象转换_java 继承的基础(转)
  4. 软考复习之路—组成原理
  5. Openshift3.9部署手册
  6. ECCV 2020 论文大盘点-姿态估计与动作捕捉篇
  7. vim linux python3,centos7 python3.7+vim8
  8. 数字游戏---巧妙解答
  9. Doris之BE的所有配置项(全面)
  10. 每天一道剑指offer-把数组排成最小的数
  11. java php 采集数据,php和java进行交互数据
  12. 51单片机读引脚和读端口测试总结
  13. list之按照中文拼音首字母排序
  14. 干货来啦!「敏捷开发畅想与实战」沙龙回顾
  15. 01-Java中的集合
  16. thinkphp5-php think常用命令
  17. LDU 2022年2021级测试赛-1
  18. 20135306-信息安全系统设计基础第一周学习总结
  19. 北京“快速AI体温检测”应对返工潮;盖茨基金出资1亿美元抗击新冠病毒;腾讯再设2亿元资金池抗击疫情...
  20. 中国网络安全人才需求

热门文章

  1. 2022年最新甘肃机动车签字授权人模拟试题及答案
  2. 基于Istio的高级流量管理一(为什么需要服务网格?深入理解Envoy)
  3. 极坐标与笛卡尔坐标的转换公式
  4. 灰度传感器(模拟和智能)两种
  5. Java程序员必会!java工具栏不见了
  6. c shell 学习记录(csh)
  7. plink如何更新表型数据
  8. uC/OS-III的任务管理
  9. ubuntu设置中文失败解决办法
  10. vue三种调用接口的方法