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)
上一篇 2022年5月10日 上午7:40
下一篇 2022年5月10日 上午7:40


相关推荐

  • WebSocket快速上手

    WebSocket快速上手文章目录WebSocket快速上手1.WebSocket是什么?1.1.WebSocket连接过程1.2.WebSocket与HTTP对比1.3.WebSocket协议2.快速上手2.1服务端2.2客户端2.2.1浏览器客户端2.2.2Java客户端WebSocket快速上手1.WebSocket是什么?WebSocket建立在TCP协议之上,并且与HTTP协议有着良好的…

    2022年7月27日
    6
  • nginx 负载均衡时,一台tomcat宕机时的问题 自动切换

    nginx 负载均衡时,一台tomcat宕机时的问题 自动切换如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用。具体配置过程如下:1.在http节点下,添加upstream节点。upstreamlinuxidc{      server10.0.6.108:7080;      server10.0.0.85:8980;}

    2022年7月23日
    16
  • 六大常见聚类方法

    六大常见聚类方法版权声明 转载自 https blog csdn net Katherine hsr article details 1 K Means K 均值 聚类算法步骤 1 首先我们选择一些类 组 并随机初始化它们各自的中心点 中心点是与每个数据点向量

    2026年3月26日
    2
  • Kimi-K2开源大模型上线一周登顶全球开源榜

    Kimi-K2开源大模型上线一周登顶全球开源榜

    2026年3月12日
    2
  • intellij idea安装步骤2019.3_IDEA java

    intellij idea安装步骤2019.3_IDEA java1.右键点击压缩包—解压到当前文件夹2.右键点击安装包—以管理员身份运行3.选择相应的安装目录,最好不要存在中文4.选择操作系统类型5.打开之前解压后得到的文件夹,点击HostsEdit文件6.在文章末尾添加0.0.0.0account.jetbrains.com和0.0.0.0www.jetbrains.com7.双击打开IDEA,选择第二项8.选择…

    2022年10月2日
    4
  • wpf一定比winform好吗_winform转wpf好转吗

    wpf一定比winform好吗_winform转wpf好转吗1、结果来说,属于两套界面渲染方式。一个是对传统windows界面元素的封装,通过gdi绘制。另一个是全新的dx渲染绘制的界面,也脱离了对传统windows控件的依赖,没有历史包袱,理论上可以展现更炫酷的界面。对初级开发人员来说,没太大区别,类似的基本设计器是他们设计界面的主要手段,一样给事件编写代码。对初级以上开发人员来说,wpf需要学习xaml,有全新的ui描述语言,特别是可以通过模板的嵌套…

    2025年7月27日
    4

发表回复

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

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