本文主要是介绍Oracle实践|快速了解内置函数之INSTR,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师
🏆 近期荣誉:华为云云享专家、阿里云专家博主、腾讯云优秀创作者、ACDU成员
🔥 三连支持:欢迎 ❤️关注、👍点赞、👉收藏三连,支持一下博主~
文章目录
- 背景
- 学习INSTR
- 关于INSTR
- 操作环境
- 语法格式
- 示例解析
- 默认参数
- 有检索参数
- 有检索频率参数
- 错题解析
- 总结
背景
昨日,也就是25日,在墨天轮的「每日一题」上面答题,做错了,当再次认真审题的时候,发现了,哦吼。原来如此,明明是三个“surge”,……这?想着就再复习下这个函数吧。首先说下哈,这个栏目其实挺好的,每天做一题,查缺补漏也好,增长知识也罢,至少让自己都在学习中,是一件很快乐的事情。
(PS:我其实有些时候不理解自己,针对越是有些简单的题目,越是会做错,不知道有没有同我一样的题友?哭笑不得ing)
学习INSTR
关于INSTR
简单描述:INSTR
是 Oracle 数据库
中的一种内置函数,用于在给定的字符串中查找子字符串,并返回子字符串首次出现的位置。
Oracle 数据库提供了丰富的内置函数,涵盖数值处理、字符串操作、日期和时间处理、逻辑判断、集合处理、数据分析、数据类型转换
等多个方面。下面就随着我一起来学习下这个内置函数吧,有解释不到之处,还望批评指正。
操作环境
为了方便演示,我直接在线上SQL环境进行演示,当前演示环境信息如下:
语法格式
【语法格式】
INSTR(string1, string2[, start_position[, occurrence]])
【参数描述】
string1(必填)
:源字符串,即要在其中搜索子串的字符串(简单理解,在哪里查找string2
)。string2(必填)
:目标子串,即要查找的字符串(简单理解,被查找的字符串
)。start_position(可选
):指定从源字符串中的哪个位置开始搜索(开始检索的位置
),值必须是一个非0的整数。
○ 当省略不填写时默认值为1,那么表示从源字符串的起始处开始搜索。
○ 当填写的位置的数值为负数时,那么表示搜索将从源字符串的倒数相应位置开始(例如,-1表示从最后一个字符开始)。occurrence(可选
):指定要查找子串在源字符串中第几次(出现的频率)出现的位置,值必须是一个整数。
○ 当省略不填写时默认值为1,即查找第一次出现的位置。
○ 当填写的位置的数值大于1的值时,则查找指定次数的出现位置。
○ 当填写的次数不存在(即子串在源字符串中出现次数少于指定次数),则返回0。
⚠️注意
关于Oracle中INSTR的语法,可以参考此处:https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/img_text/instr.html
示例解析
下面举一个列子,也就从这个例子开始吧(这图是真难画,使用PPT画的,凑合看吧)。很简单的一个句子:不装了,摊牌了,我又做错了
。
默认参数
INSTR([检索字符串], [被检索的字符串])
SELECT INSTR( '不装了,摊牌了,我又做错了', '了' ) FROM dual;
上面结果表示,使用这个函数之后,从字符串(不装了,摊牌了,我又做错了
)每个字符开始检索,首次匹配
到「了
」后返回「了」在整个字符串中的位置值
。从上面的图标注也可以看出来,默认情况下,匹配到目标字符串「了
」的位置为3
,所以结果正好是3
。
有检索参数
INSTR([检索字符串], [被检索的字符串], [检索位置])
SELECT INSTR( '不装了,摊牌了,我又做错了', '了', 1) FROM dual;
SELECT INSTR( '不装了,摊牌了,我又做错了', '了', -1) FROM dual;
此时,上述语句的结果等同于下面的语句结果,也就是我们默认情况:
SELECT INSTR('不装了,摊牌了,我又做错了', '了') FROM dual;
当开始位置为负数时,其实是从右边开始检索,然后找出「了
」所在的位置,即排在13位置
(当真正理解这个函数的的意义的时候,其实就很好的处理这类问题)。这里其实还是有疑问,例如我是下面的语句,会如何呢?
SELECT INSTR('不装了,摊牌了,我又做错了', '了', 2) FROM dual;
SELECT INSTR('不装了,摊牌了,我又做错了', '了', 3) FROM dual;
大家可以尝试下,其实上面两个结果都是3
,结果如下展示:
有检索频率参数
INSTR([检索字符串], [被检索的字符串], [检索位置], [检索频率])
SELECT INSTR( '不装了,摊牌了,我又做错了', '了', 4, 1) default_1,INSTR( '不装了,摊牌了,我又做错了', '了', 9, 2) default_2
FROM dual;
上面查询的字段「default_1
」的含义是从第4个位置
开始匹配,匹配1次
后的「了
」字的位置,对照上面的表,可以看出来是 7
;字段「default_2
」是从第9个位置
开始匹配,匹配2次
「了
」字的位置,其实第一次匹配
到了「我有做错了
」中的「了
」字,后续再匹配找不到匹配结果,所以此时返回 0
。
错题解析
回归到正题,其实我个人认为,当看到语法格式的时候,已经可以把这一题目做对了,而我却又偏偏做错了,而且还错的那么离谱,这对我来说,的确是值得反思的一件事情。当看完示例解析之后,答案是不是显而易见了?开头讲到的题目的正确答案为 A
。
总结
失败不可怕,错误也不可怕,有错就要认,挨打要立正,多多学习知识,多多记笔记,好处蛮多。
欢迎关注博主 「六月暴雪飞梨花」 或加入【六月暴雪飞梨花社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。
[引入介绍]
- 官方说明:https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/INSTR.html
- 盖国强老师整理的材料真好:https://www.modb.pro/db/22372
- INSTR说明:https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/img_text/instr.html
这篇关于Oracle实践|快速了解内置函数之INSTR的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!