Oracle实践|快速了解内置函数之INSTR

2024-04-27 11:04

本文主要是介绍Oracle实践|快速了解内置函数之INSTR,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师
🏆 近期荣誉:华为云云享专家、阿里云专家博主、腾讯云优秀创作者、ACDU成员
🔥 三连支持:欢迎 ❤️关注、👍点赞、👉收藏三连,支持一下博主~

文章目录

  • 背景
  • 学习INSTR
    • 关于INSTR
    • 操作环境
    • 语法格式
  • 示例解析
    • 默认参数
    • 有检索参数
    • 有检索频率参数
  • 错题解析
  • 总结

背景

昨日,也就是25日,在墨天轮的「每日一题」上面答题,做错了,当再次认真审题的时候,发现了,哦吼。原来如此,明明是三个“surge”,……这?想着就再复习下这个函数吧。首先说下哈,这个栏目其实挺好的,每天做一题,查缺补漏也好,增长知识也罢,至少让自己都在学习中,是一件很快乐的事情。
(PS:我其实有些时候不理解自己,针对越是有些简单的题目,越是会做错,不知道有没有同我一样的题友?哭笑不得ing)
在这里插入图片描述

学习INSTR

关于INSTR

简单描述INSTROracle 数据库中的一种内置函数,用于在给定的字符串中查找子字符串,并返回子字符串首次出现的位置。

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,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。


[引入介绍]

  1. 官方说明:https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/INSTR.html
  2. 盖国强老师整理的材料真好:https://www.modb.pro/db/22372
  3. INSTR说明:https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/img_text/instr.html

这篇关于Oracle实践|快速了解内置函数之INSTR的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/940326

相关文章

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分