Oracle数据库中字符串截取最全方法总结

 更新时间:2024年03月29日 09:08:26   作者:GitHub质检员  
Oracle提供了多种截取字符串的操作方法,可以根据具体需求选择合适的方法进行操作,下面这篇文章主要给大家总结介绍了关于Oracle数据库中字符串截取的最全方法,需要的朋友可以参考下

substr 函数:截取字符串

语法SUBSTR(string,start, [length])

string:表示源字符串,即要截取的字符串。

start:开始位置,从1开始查找。如果start是负数,则从string字符串末尾开始算起**。**

length:可选项,表示截取字符串长度。

示例

SELECT SUBSTR('Hello SQL!', 1) FROM dual     --截取所有字符串,返回'Hello SQL!'
SELECT SUBSTR('Hello SQL!', 2) FROM dual     --从第2个字符开始,截取到末尾。返回'ello SQL!'
SELECT SUBSTR('Hello SQL!', -4) FROM dual    --从倒数第4个字符开始,截取到末尾。返回'SQL!'
SELECT SUBSTR('Hello SQL!', 3, 6) FROM dual  --从第3个字符开始,截取6个字符。返回'llo SQ'
SELECT SUBSTR('Hello SQL!', -4, 3) FROM dual --从倒数第4个字符开始,截取3个字符。返回'SQL'

instr 函数:返回子字符串在源字符串中的位置

语法INSTR(string,child_string,[start],[show_time])

string:表示源字符串。

child_string:子字符串,即要查找的字符串。

start:可选项,开始位置,默认从1开始。如果为负数,则从右向左检索。

show_time:可选项,表示子字符串第几次出现在源字符串当中,默认第1次,负数则报错。

示例

--表示从源字符串'city_company_staff'中第1个字符开始查找子字符串'_'第1次出现的位置
SELECT INSTR('city_company_staff', '_') FROM dual    --返回5

--表示从源字符串'city_company_staff'中第5个字符开始查找子字符串'_'第1次出现的位置
SELECT INSTR('city_company_staff', '_', 5) FROM dual    --返回5

--表示从源字符串'city_company_staff'中第5个字符开始查找子字符串'_'第1次出现的位置
SELECT INSTR('city_company_staff', '_', 5, 1) FROM dual    --返回5

--表示从源字符串'city_company_staff'中第3个字符开始查找子字符串'_'第2次出现的位置
SELECT INSTR('city_company_staff', '_', 3, 2) FROM dual    --返回13

--start参数为-1,从右向左检索,查找'_'字符串在源字符串中第1次出现的位置
SELECT INSTR('city_company_staff', '_', -1, 1) FROM dual    --返回13

--start参数为-6,从右向左检索,查找'_'字符串在源字符串中第2次出现的位置
SELECT INSTR('city_company_staff', '_', -6, 2) FROM dual    --返回5

substr 函数结合 instr 函数截取字符串

现有需求:数据查询处理需要对code进行"拆分"

code命名规则类似:城市_所属公司_员工职位_员工姓名

其中,城市、公司、职位、姓民字符串长度不固定,由于字符串长度不固定,只使用substr函数无法实现需求,需配合instr函数定位到字符’_'的位置,然后使用substr函数进行截取。详细见下面例子。

表数据如下:

SOURCE_CODE

BJ_BAIDU_CEO_LY

SH_BOKE_MANAGER_LWX

HRB_WM_CASHIER_OYZY

获取城市

SELECT
	SUBSTR (SOURCE_CODE, 1, INSTR (SOURCE_CODE, '_', 1, 1) - 1) AS CITY
FROM
	TABLE_CODE_TEST

结果

解释:此处截取源字符串SOURCE_CODE,从第1个字符开始,由于代表城市的code长度不固定,我们无法确定截取几个字符,所以使用instr函数判断第一个’_'字符的位置,进而确定每个SOURCE_CODE截取几个字符串。

那为什么减1呢

是因为**INSTR (SOURCE_CODE, ‘_’, 1, 1)**获取的是源字符串中’_'字符第一次出现的位置,再减1就得出了CITY字符个数。

获取公司:

SELECT
	SUBSTR (
		SOURCE_CODE, 
		INSTR (SOURCE_CODE, '_', 1, 1) + 1, 
		INSTR (SOURCE_CODE, '_', 1, 2) - INSTR (SOURCE_CODE, '_', 1, 1)-1
	) AS COMPANY
FROM
	TABLE_CODE_TEST

结果:

解释:截取源字符串,从(第一个’_'出现位置+1)开始,截取个数为:第2个’_‘出现位置减去第1个’_‘出现位置,此时还多了一个下划线’_',再减去1即可得到代表公司字符串。

获取姓名:

SELECT
	SUBSTR (SOURCE_CODE, INSTR (SOURCE_CODE, '_', 1, 3) + 1) AS STF_NAME
FROM
	TABLE_CODE_TEST

结果:

解释:截取源字符串,从('_'第3次出现位置+1)开始截取,截取到末尾。

Oracle 字符串截取 从后向前截取方法

Oracle 字符串截取 从后向前截取方法 

  • NSTR:INSTR方法的格式为
    • INSTR(源字符串, 目标字符串, 起始位置, 匹配序号)
    • 默认查找顺序为从左到右。当起始位置为负数的时候,从右边开始查找。
  • SUBSTR:取子字符串 取子字符串
  • SUBSTR(源字符串,起始位置,要取多少位)

从“起始位置”开始,取“多少"个

select 'ZA01X-00000' as item_code
,instr('ZA01X-00000','-00000',-1,1) as position
,substr('ZA01X-00000',instr('ZA01X-00000','-00000',-1,1),length('ZA01X-00000')) as result
from dual
;

--
ITEM_CODE   POSITION    RESULT
ZA01X-00000 6           -00000
--
select substr('ZA01X-00000',-6) as result
from dual
;
--
RESULT
-00000
--

-- 实现 在ITEM CODE 中截取 ‘-00000' 字符串

总结

到此这篇关于Oracle数据库中字符串截取最全方法的文章就介绍到这了,更多相关Oracle字符串截取方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于Oracle中SqlLoader的用法

    关于Oracle中SqlLoader的用法

    这篇文章主要介绍了关于Oracle中SqlLoader的用法,sqlldr是oracle的sql*loader工具,他可以把外部的文本格式数据导入到oracle的内部表中,适用于不同数据库之间的数据转化迁移,需要的朋友可以参考下
    2023-07-07
  • oracle 12c创建可插拔数据库(PDB)与用户详解

    oracle 12c创建可插拔数据库(PDB)与用户详解

    Oracle12c 中,增加了可插接数据库的概念,即PDB,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。下面这篇文章主要给大家介绍了利用oracle 12c创建可插拔数据库(PDB)与用户的相关资料,文中介绍的很详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02
  • oracle 更改数据库名的方法

    oracle 更改数据库名的方法

    这两天一朋友问如何更改数据库名,于是做个测试,简单记录下,以便说明问题。
    2009-10-10
  • Oracle表中已有数据修改字段类型方式

    Oracle表中已有数据修改字段类型方式

    这篇文章主要介绍了Oracle表中已有数据修改字段类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Orancle的SQL语句之多表查询和组函数

    Orancle的SQL语句之多表查询和组函数

    这篇文章主要介绍了Orancle的SQL语句之多表查询和组函数的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-11-11
  • 限制ip访问Oracle数据库的方法步骤

    限制ip访问Oracle数据库的方法步骤

    这篇文章主要给大家介绍了关于限制ip访问Oracle数据库的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者使用Oracle数据库具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-08-08
  • Oracle的数据字典技术简析

    Oracle的数据字典技术简析

    Oracle的数据字典技术简析...
    2007-03-03
  • Oracle查询表空间大小及每个表所占空间的大小语句示例

    Oracle查询表空间大小及每个表所占空间的大小语句示例

    Oracle表空间大小的查看方法应该是我们都需要掌握的知识,下面这篇文章主要给大家介绍了关于Oracle查询表空间大小及每个表所占空间的大小语句的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • Oracle 11G数据库审计监控设置指南

    Oracle 11G数据库审计监控设置指南

    Oracle 11G数据库审计监控涉及创建独立表空间、查看审计信息、迁移表空间、开启审计及审计维护等步骤,合理规划审计表空间有助于管理审计数据,避免影响系统表空间,审计监控涵盖审计数据迁移、自动清理、权限分配、查询审计类型等方面,确保数据库安全性能
    2024-10-10
  • 教你如何静默安装ORACLE

    教你如何静默安装ORACLE

    这篇文章主要介绍了教你如何静默安装ORACLE,需要的朋友可以参考下
    2014-08-08

最新评论