oracle中substr与instr

本文详细介绍了Oracle中instr和substr函数的使用方法及应用案例,包括如何判断字符串中是否包含特定字符、如何从字符串中提取指定字符,并通过实例展示了它们在模糊查询和判断包含关系中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在oracle中,可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符。在一个字符串中查找指定的字符,返回被查找到的指定字符的位置。

语法:

Instr(sourceString,destString, start,appearPosition)

Instr('源字符串' , '目标字符串' ,'开始位置','第几次出现')

appearPosition代表想从源字符中查找出第几次出现的destString,这个参数也是可选的, 默认为1,如果start的值为负数,则代表从右往左进行查找,但是位置数据仍然从左向右计算。--也就是查找从右往左,但查找到的数据位置是从左往右数的位置。

返回值为:查找到的字符串的位置。

举例:

instr用法:

select instr('abcd','a') from dual;  --返回1
select instr('abcd','c') from dual;  --返回3
select instr('abcd','e') from dual;    --返回0

该函数可以用于模糊查询以及判断包含关系:

例如:

① select code, name, dept, occupation  from staff  where instr(code, '001') > 0;

  等同于

  select code, name, dept, occupation  from staff  where code like '%001%' ;

② select ccn,mas_loc from mas_loc where instr('FH,FHH,FHM',ccn)>0;

  等同于

  select ccn,mas_loc from mas_loc where ccn in ('FH','FHH','FHM');

 

Substr()函数:用于从给定的字符串中返回一个子字符串。

语法:substr(cExpression,nStartPostion,[, nCharactersReturned])

Substr(字符串,截取开始位置,截取长度)//返回截取的字

其中截取位置(nStartPostion)默认为1,与0一致。

举例:

substr('Hello World',-3,3)//返回结果为 'rld' *负数(-i)表示截取的开始位置为字符串右端向左数第i个字符。

 

-----

Postgresql有相同substr函数,功能相同,但是在0位置返回不同,且存在负数位置,如:

但正数位置是相同的:

Postgresql对此俩函数的改造可分别用:postion() substring()。

 

 

---------

本系列为最近一段时间学习oracle的学习笔记,记录于此作为自身回顾,其中有的来的网络,有的来的书籍,但时间已久,记不清哪些是引用,如是转载但没标注出,特意致歉。

转载于:https://www.cnblogs.com/space-place/p/5176933.html

### 使用 `SUBSTR` 和 `INSTR` 函数的组合 在 Oracle 数据库中,`SUBSTR` 和 `INSTR` 是两个非常有用的字符串处理函数。通过将这两个函数结合起来使用,可以实现复杂的字符串操作。 #### SUBSTR 函数简介 `SUBSTR` 函数用于返回指定位置和长度的子串。语法如下: ```sql SUBSTR(string, start_position [, length]) ``` - `string`: 要截取的源字符串。 - `start_position`: 子串起始位置(正数表示从左到右;负数表示从右到左)。 - `length`: 可选参数,指明要获取多少字符,默认直到字符串结束[^1]。 #### INSTR 函数简介 `INSTR` 函数用来查找一个字符串首次出现的位置。其基本形式为: ```sql INSTR(source_string, search_string[, start_position][, occurrence_number]) ``` - `source_string`: 原始字符串。 - `search_string`: 查找的目标字符串。 - `start_position`: 开始搜索的位置,默认为 1。 - `occurrence_number`: 找第几次匹配的结果,默认为第一次即 1[^2]。 #### 组合应用实例 下面展示了一个具体的例子来说明如何联合运用这两种功能强大的工具来进行数据提取工作: 假设有一个名为 `EMPLOYEES` 的表格,其中包含员工的名字和其他信息字段。现在想要取出每个人的姓氏部分作为新列显示出来,则可以通过以下方式完成此任务: ```sql SELECT first_name, last_name, email, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id, -- 提取名字中的第一个单词后的所有内容视为姓氏 SUBSTR(first_name, INSTR(first_name,' ')+1) AS extracted_lastname FROM employees; ``` 在这个查询语句里,`INSTR()` 定位到了空格所在之处并加一得到第二个词也就是姓氏开头的地方;接着由 `SUBSTR()` 来读取该处之后的所有字母形成最终结果集的一部分[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值