专栏首页小麦苗的DB宝专栏【DB笔试面试452】函数SUBSTR和INSTR有什么区别?

【DB笔试面试452】函数SUBSTR和INSTR有什么区别?

题目部分

函数SUBSTR和INSTR有什么区别?

答案部分

SUBSTR和INSTR都是字符函数,SUBSTR是截取子串,而INSTR的作用是获取指定字符的位置。

1、SUBSTR:截取子串

下标从1开始,这个函数有三个参数,第一个参数为目标字符串,第二个参数是将要输出的子串的起点,第三个参数是将要输出的子串的长度,如果没有第三个参数,那么余下的字符全部输出。如果第二个参数为负数,那么将会从目标字符串的尾部开始向前定位至负数的绝对值的位置。下面给出一个例子:

SYS@raclhr1> SELECT SUBSTR('lihuarong',0,3) col_1,
  2              SUBSTR('lihuarong',1,3)col_2,
  3              SUBSTR('lihuarong',3)col_3,
  4              SUBSTR('lihuarong',-4,3) col_4
  5  FROM DUAL;
COL COL COL_3   COL
--- --- ------- ---
lih lih huarong ron

2、INSTR:相当于STRING类中的INDEXOF,求索引

如果需要知道在一个字符串中满足特定的内容的子串位置,那么可以使用INSTR,它的第一个参数是目标字符串,第二个参数是匹配的内容,第三和第四个参数是数字,用以指定开始搜索的起点以及指出第几个满足条件的将会被返回。默认第三个与第四个参数的数值均为1,如果第三个数值为负数,那么将会从后向前搜索。如果未匹配到,那么返回0。需要注意的是,无论是从前向后还是从后向前搜索,返回的数值都是从左到右的数值。

SYS@raclhr1> SELECT INSTR('HelloWHoldhH', 'H', 6, 2) l1, --从第6个位置开始,第2次出现H的位置
  2         INSTR('HelloWHoldhH', 'H') l2, --从第1个位置开始,第1次出现H的位置
  3         INSTR('HelloWHoldhH', 'H', 2) l3, --从第2个位置开始,第1次出现H的位置
  4         INSTR('HelloWHoldhH', 'H', -1) l4, --从倒数第1个位置开始从右往左搜索,第1次出现H的位置
  5         INSTR('HelloWHoldhH','/')  l5--从第1个位置开始,第1次出现H的位置,如果匹配不到那么返回0
  6  FROM   DUAL;
        L1         L2         L3         L4         L5
---------- ---------- ---------- ---------- ----------
        12          1          7         12          0

3、INSTR的特殊用法

下面的2条SQL语句的功能是一样的:

SELECT * FROM DBA_OBJECTS D WHERE  INSTR('5,6,7', D.OBJECT_ID) > 0;
SELECT * FROM DBA_OBJECTS D WHERE D.OBJECT_ID=5 OR D.OBJECT_ID=6 OR D.OBJECT_ID=7;

其结果为:

SQL> SELECT D.OBJECT_ID FROM DBA_OBJECTS D WHERE  INSTR('5,6,7',D.OBJECT_ID) > 0;
 OBJECT_ID
----------
         7
         6
         5

4、SUBSTR和INSTR的联合使用

SUBSTR和INSTR这2个函数常常关联使用,但是如果INSTR匹配不到字符串的话,那么返回的就是0,这样SUBSTR得到的值就是空值,所以,这个时候就应该进行转换,使用DECODE或其它函数来转化。下面给出一个例子:

SELECT NAME,
       SUBSTR(NAME, 1, INSTR(NAME, 'a') - 1),
       DECODE(INSTR(NAME, 'a'),0, NAME,SUBSTR(NAME, 1, INSTR(NAME, 'a') - 1))
FROM   XB_B;

本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。

About Me:小麦苗

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

本文分享自微信公众号 - DB宝(xiaomaimiaolhr),作者:小麦苗best

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-12-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【DB笔试面试444】Oracle中PL/SQL的流程控制语句包括哪些?

    在任何计算机语言(例如C/C++、Java、Pascal、SHELL等)中,都有各种控制语句(条件语句,循环结构,顺序控制结构等),在PL/SQL中也存在这样的...

    小麦苗DBA宝典
  • 【OCP最新题库解析(052)--题55】 which two statements are true about

    该系列专题为2018年4月OCP-052考题变革后的最新题库。题库为小麦苗解答,若解答有不对之处,可留言,也可联系小麦苗进行修改。

    小麦苗DBA宝典
  • scrapy shell

    执行scrapy shell http://www.521609.com,查看response

    小麦苗DBA宝典
  • iOS 自己封装的网络请求,json解析的类

    王大锤
  • SQL语句帮助大全

    --删除约束 Status:字段名 alter table Table_1 drop constraint Status; --添加约束 --Status :字...

    纯粹是糖
  • Pokémon GO国内玩不了?腾讯AR专家教你自己做!

    Pokémon Go一出,新鲜的玩法、经典的IP效应让这款使用了Unity以及AR技术的手游火遍了“大洋”南北。可惜的是这款新鲜的游戏还没有惠及中国市场的玩家们...

    WeTest质量开放平台团队
  • 黑客黑产攻防:1秒定生死的幽灵战

    黑客黑产攻防:1秒定生死的幽灵战; 你在前端秒杀,他们在后台博弈; 犯案模式更简单粗暴,随着国内互联网金融、人工智能和大数据等产业继续深化发展,互联网为实体产业...

    企鹅号小编
  • 【Soft】打破次元壁垒 – 啊噗啊噗UPUPOO 动态桌面

    Hyejeong小DD
  • Mysql高级 (3) -- 使用profile来分析sql

    用户5927264
  • Logistic回归损失函数证明

    在理解Logistic回归算法原理中我们指出了Logistic回归的损失函数定义(在这里重新约定符号): [图片] ? 而对于全体样本集的成本函数,就可以...

    chaibubble

扫码关注云+社区

领取腾讯云代金券