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 Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之效率。 何谓v0.dev? v0.dev者,现代化之开发者工具也,旨在简化并加速软件开发之过程。其集多种功能于一体,助开发者高效编写、测试及部署代码。无论汝为前端开发者、后端开发者

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争