一、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函数进行截取。详细见下面例子。

表数据如下:

获取城市:

SELECTSUBSTR (SOURCE_CODE, 1, INSTR (SOURCE_CODE, '_', 1, 1) - 1) AS CITY
FROMTABLE_CODE_TEST

结果:

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

那为什么减1呢?

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

获取公司:

SELECTSUBSTR (SOURCE_CODE, INSTR (SOURCE_CODE, '_', 1, 1) + 1, INSTR (SOURCE_CODE, '_', 1, 2) - INSTR (SOURCE_CODE, '_', 1, 1)-1) AS COMPANY
FROMTABLE_CODE_TEST

结果:

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

获取姓名:

SELECTSUBSTR (SOURCE_CODE, INSTR (SOURCE_CODE, '_', 1, 3) + 1) AS STF_NAME
FROMTABLE_CODE_TEST

结果:

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

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

Oracle中字符串截取最全方法总结相关推荐

  1. c#中字符串截取使用的方法

    String substring(int beginIndex) String substring(int beginIndex, int endIndex) String.Substring (In ...

  2. js中字符串截取函数及其方法

    1.slice() 一个参数的时候,表示截取从索引值开始(包括当前),直到字符串结束 两个参数的时候,第一个值表示从索引值开始,第二个值表示到哪个索引值结束(两者都包含当前) 2.substring( ...

  3. oracle 截取 tr,oracle中实现截取字符串(substr)、查找字符串位置(instr)、替换字符串(replace)...

    (1)oracle中实现截取字符串:substr substr(string, start_position, [length]) 其中,string是元字符串,start_position为开始位置 ...

  4. Java中String字符串截取几种方法(substring,split)

    Java中String字符串截取几种方法 substring,split 这是一个Java中的String的基础用法的演示. 下面通过代码对大家进行讲解 substring 这里用来ndexOf,la ...

  5. oracle中spool命令的使用,Oracle中Spool命令的使用方法实例

    Oracle中Spool命令的使用方法实例 前言 对于Oracle中的Spool命令,其实还可以换一种问法为,如何将sqlplus中的结果输出到指定的文件夹中. 近期在进行Oracle数据库备份的时候 ...

  6. oracle 字符转整数,Oracle中字符串转换函数小数转法

    Oracle中字符串转换函数小数转法 类别:Oracle数据库   作者:码皇   来源:薛凯博客     点击: Oracle中字符串转换函数小数转法 to_char()函数的字符串转换格式归纳如下 ...

  7. Oracle中的AWR,全称为Automatic Workload Repository

    Oracle中的AWR,全称为Automatic Workload Repository,自动负载信息库.它收集关于特定数据库的操作统计信息和其他统计信息,Oracle以固定的时间间隔(默认为1个小时 ...

  8. oracle中nowait怎么用,oracle中UPDATE nowait 的使用方法介绍

    oracle中UPDATE nowait 的使用方法介绍 1.UPDATE nowait 应用以下场景:查询某条数据,并对其开启数据库事务.如果查询的当前数据没有加锁,则正确返回结果,并对当前数据加锁 ...

  9. Oracle 中启动 Scott 用户 的方法

    Oracle 中启动 Scott 用户 的方法 , 在 Oracle10g, (g 代表'网络'的意思) 数据库中  Scott 这个用户 安装时是被锁定的,安装 Oracle的时候 ,你可以直接选择 ...

  10. Oracle中raise触发异常,Oracle中RAISE异常的解决方法

    今天小编给大家分享一篇中RAISE异常的解决方法,感兴趣的朋友跟小编一起来了解一下吧! 有三种方式抛出异常 1.通过PL/SQL运行时引擎 2.使用RAISE语句 3.调用RAISE_APPLICAT ...

最新文章

  1. CentOS下查看最后登录的用户信息以及LOG记录
  2. ztree和php结合实例,实例详解jQuery EasyUI结合zTree树形结构制作web页面
  3. Python day13文件的读写
  4. linux 查看运行平台,linux查看程序运行相关命令
  5. matlab中esp=1.0e-3,ESP系列杂谈(一): eFuse 简介
  6. ajax split len,jQuery Mobile中的data属性
  7. OpenCV入门(八)——形态学技术
  8. GEO、TCGA数据下载慢 下载中断解决办法
  9. html简单图片轮播居中,html简单图片轮播的实现
  10. 【公开课报名】腾讯产品经理教你如何用好腾讯会议
  11. UnicodeDecodeError: 'rawunicodeescape' codec can't decode bytes in position 80-81: truncated \UXXX
  12. 在gitee上建自己的博客
  13. 2020年主流服务器主板,电脑主板怎么选(2020电脑主板选购指南及检测)
  14. java计算机毕业设计基于ssm的协同过滤算法的电影推荐系统(源代码+数据库+Lw文档)
  15. 燃气管道运行全局实时监控系统-海城支线总页面
  16. 食物语服务器什么时候维护,食物语无法登录游戏怎么办_食物语无法登录游戏解决方法介绍_游戏吧...
  17. opencore黑苹果教程
  18. java for 代表什么意思_java中的for是什么意思
  19. C#线程实现暂停与继续
  20. 关于简书项目满屏登录框的总结

热门文章

  1. 小程序调用服务器图片错误,微信小程序列表图片加载错误处理
  2. 中国第一代程序员潘爱民的程序人生
  3. 获取当前的格林尼治时间
  4. struts全局视图与局部视图
  5. LOJ2312 LUOGU-P3733「HAOI2017」八纵八横 (异或线性基、生成树、线段树分治)
  6. 【Enhanced Time-Frequency Representation and Mode Decomposition】翻译1
  7. Debian10安装部署DNS服务-正向解析篇
  8. 金融行业软件测试面试题(含答案)
  9. 解决服务器网卡不识别问题
  10. IP数据报首部的格式:关于标识(identification)、标志(flag)和片偏移