前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle/Mysql中 instr() 函数的用法|Oracle/Mysql中 instr()跟like有相同的功能进行模糊匹配查询, instr()更高级

Oracle/Mysql中 instr() 函数的用法|Oracle/Mysql中 instr()跟like有相同的功能进行模糊匹配查询, instr()更高级

作者头像
小小鱼儿小小林
发布2020-06-24 11:56:40
2.9K0
发布2020-06-24 11:56:40
举报
文章被收录于专栏:灵儿的笔记灵儿的笔记

前言

今天发现了一个更高级的函数instr(),所以今天就介绍介绍这个函数。这个函数俗称字符查找函数,但是也可以用来做模糊查询。

一、instr()用法

格式一:

instr( C1, C2) ---》说明: instr(源字符串, 目标字符串)

代码语言:javascript
复制
select instr('hellohello','h') from dual /*返回结果:1,从1开始数,直到第一次出现h*/
select instr('hellohello','ll') from dual /*返回结果:3,从1开始数,知道第一次出现ll*/

格式二:

instr( C1,C2,I,J ) -----》说明: instr(源字符串, 目标字符串, 起始位置, 匹配序号)

C1 被搜索的字符串 C2 希望搜索的字符串 I 搜索的开始位置,默认为1 J 出现的位置,默认为1

描述为:在C1中搜索C2,从第 I 个位置开始搜索(包括这个I),直到出现第J次C2,返回这个序号,(I 也可以为负数,表示从倒数第一个位置开始数,但是返回的序号还是从正的数的那个序号)

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

代码语言:javascript
复制
select instr('hellohello','l',2,2) from dual;  
--返回结果:4    也就是说:在"hellohello"的第2(e)号位置开始,查找第二次出现的“l”的位置


select instr('hellohello','l',3,2) from dual;  
--返回结果:4    也就是说:在"hellohello"的第3(l)号位置开始,查找第二次出现的“l”的位置


select instr('hellohello','l',4,2) from dual;  
--返回结果:8    也就是说:在"hellohello"的第4(l)号位置开始,查找第二次出现的“l”的位置


select instr('hellohello','l',-1,1) from dual;  
--返回结果:9    也就是说:在"hellohello"的倒数第1(o)号位置开始,往回查找第一次出现的“l”的位置,然后这个位置在正数的序号


select instr('hellohello','l',-2,2) from dual;  
--返回结果:8    也就是说:在"hellohello"的倒数第2(l)号位置开始,往回查找第二次出现的“l”的位置,然后这个位置在正数的序号


select instr('hellohello','l',2,3) from dual;  
--返回结果:8    也就是说:在"hellohello"的第2(e)号位置开始,查找第三次出现的“l”的位置


select instr('hellohello','l',-2,3) from dual; 
--返回结果:4    也就是说:在"hellohello"的倒数第2(l)号位置开始,往回查找第三次出现的“l”的位置,然后这个位置在正数的序号

instr() 和like的相同之处,

首先回顾一下like的用法: 字段 like ‘%关键字%’ 表示字段包含”关键字”的所有记录

字段 like ‘关键字%’ 表示字段以”关键字”开始的所有记录

字段 like ‘%关键字’ 表示字段以”关键字”结束的所有记录

字段 not like '%关键字 %' 表示字段不包含“关键字”的所有

那么instr()的用法

instr(字段,'关键字') > 0 相当于 字段like '%关键字%': 表示字段包含”关键字”的所有记录

instr(字段,'关键字') = 1 相当于 字段like '关键字%' 表示字段以”关键字”开始的所有记录

instr(字段,'关键字') = 0 相当于 字段not like '%关键字%' 表示字段不包含“关键字”的所有

代码语言:javascript
复制
/*这两条查询的效果是一样的*/
select * from tableName where name like '%hello%';
select * from tableName where instr(name,'hello')>0

在一定程度上,instr()的查询效率还是比like要好的,这里就不测试了,大家可以在一张表里建个几万条数据查查看,看下哪个效率高一点。

嘿嘿 还有一点就是,你使用高级函数,给人的感觉还是不一样的,给人刮目相看的感觉哦,所以记住这个instr函数了吗

参考文章

https://www.cnblogs.com/dshore123/p/7813230.html

https://blog.csdn.net/weixiaohuai/article/details/83513957

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/06/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、instr()用法
    • 格式一:
      • 格式二:
        • instr() 和like的相同之处,
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档