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

Oracle中字符串截取最全方法总结substr函数:截取字符串 语法:SUBSTR(string,start,[length])string:表示源字符串,即要截取的字符串。start:开始位置,从1开始查找。如果start是负数,则从string字符串末尾开始算起。length:可选项,表示截取字符串长度。示例:SELECTSUBSTR(‘HelloSQL!’,1)FROMdual…

大家好,又见面了,我是你们的朋友全栈君。

  • 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

结果

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

解释:此处截取源字符串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

结果:

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

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

获取姓名:

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

结果:

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

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142123.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm专业版下载安装教程_pycharm2021专业版安装教程

    pycharm专业版下载安装教程_pycharm2021专业版安装教程Pycharm官网地址(下载):https://link.zhihu.com/?target=https%3A//www.jetbrains.com/pycharm/download/other.html有各种不同版本的Pycharm供下载,本文选择Pycharm专业版下载,建议下载2020.1.5版本.安装教程下载完成之后,就按照步骤开始安装了,点击Next:我选择安装在F盘,因为C盘太占用空间了,会比较卡,点击Next:一定要选着添加到环境变量中,不然后面还要手动配置环境变量,比较麻烦,

    2022年8月28日
    3
  • 常见深度学习模型总结「建议收藏」

    常见深度学习模型总结「建议收藏」lenetLenet是最早的卷积神经网络之一,并且推动了深度学习领域的发展,最初是为手写数字识别建立的网络。LeNet分为卷积层块和全连接层块两个部分。卷积层块里的基本单位是卷积层后接最大池化

    2022年8月5日
    10
  • 无锁编程实例

    无锁编程实例最近在研究nginx的自旋锁的时候,又见到了GCCCAS原子操作,于是决定动手分析下CAS实现的无锁到底性能如何,网上关于CAS实现无锁的文章很多,但少有研究这种无锁的性能提升的文章,这里就以实验结果和我自己的理解逐步展开。1.什么是CAS原子操作在研究无锁之前,我们需要首先了解一下CAS原子操作——Compare&Set,或是Compare&Swap,现在

    2022年6月3日
    31
  • rammap使用_查看内存的命令

    rammap使用_查看内存的命令参考TechnetProcessPrivate:分配给单一Process专用的内存MappedFile:用来储放档案内容快取(Cache)的内存空间SharedMemory:标注给多个Process共用的内存分页(Page,内存管理单位)PageTable:用来描述虚拟内存位址的分页表(裡面是一笔一笔的PTE,PageTableEntries)PagedPool…

    2025年8月10日
    3
  • c++拷贝构造函数

    c++拷贝构造函数

    2021年9月29日
    46
  • java可视化编程-eclipse安装windowbuilder插件「建议收藏」

    一直做在安卓用xml作界面,对于java的控件不熟悉,也不习惯用代码做UI尤其是布局。找了一下发现可以安装windowbuilder来实现java的可视化编程,但是很多资料里的连接都失效了。刚自己弄完比较熟悉,总结一下希望能帮到。我是直接在线安装的windowbuilder一.找到对应版本的windowbuilder打开这个链接:http://www.eclipse.org/w

    2022年3月11日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号