oracle学习笔记:字符串替换 replace、regexp_replace、translate函数

时间:2022-03-09 04:20:20

1.replace 函数

语法:replace(char, search_string, replacement_string) --针对字符串替换

功能:

​ 将char中的字符串替换。

​ 当replacement_string为空时,剔除search_string。

select replace('fasdfasdf','fk','j') as col from dual;
-- fasdfasdf
select replace('fdasfasdd','as','jjj') as col from dual;
-- fdjjjfjjjdd

完全匹配的字符才会进行替换,如无字符匹配,则返回原字符串。

该匹配是贪婪匹配,匹配都的字符串都会被替换,不仅仅是第一个匹配到的字符串。

2.regexp_replace 函数

语法:regexp_replace(str_source, pattern_str, rep_str)

功能:

​ 支持正则表达式,用法类似于 replace,但功能更强大。

​ 当rep_str为空时,把str_source中的pattern_str字符串剔除。

select regexp_replace('abccc123','abc','*') as col from dual;
-- *cc123
select regexp_replace('abccc123','[ac]','*') as col from dual;
-- *b***123
select regexp_replace('abccc123','[ac]') as col from dual;
-- b123

可使用正则表达式进行替换,[ac]表示a或者c字符。

3.translate 函数

语法:translate(char, from, to) -- 针对单个字符替换

功能:

​ 将from替换为to字符串,逐个替换。

​ 如果from比to字符串长,那么在from中比to中多出的字符串将会被删除。

​ 三个参数中有一个为空,返回为空。

select translate('abcdefga','abc','wo') as col from dual;
-- wodefgw
select translate('abcdefga','#abc','#') as col from dual;
-- defg

a替换为w,b替换为o,c删除。

translate有#的特殊用法,以#开头表示所有字符。

select translate('12334567','1233','abcd') as col from dual;
-- abcc4567

如果相同字符对应多个字符,按第一个。

应用1

在实际业务中,可以用来删除一些异常数据,比如电话号码的有效性,11位数字,可以使用 translate 函数进行过滤。

-- 创建测试表
create table temp_cwh_001
(
acc_nbr varchar2(20)
);
-- 插入数据
insert into temp_cwh_001 values('19912345678');
insert into temp_cwh_001 values('18812345678');
insert into temp_cwh_001 values('aaabbbcccdd');
-- 查询
select * from temp_cwh_001;
-- 测试
select * from temp_cwh_001 a
where length(translate(trim(a.acc_nbr),
'0123456789' || a.acc_nbr,
'0123456789')) = length(trim(a.acc_nbr));
-- 18812345678
-- 19912345678

解释:通过在acc_nbr字段的前面拼上0123456789数字字符串之后,将0123456789替换为0123456789,则其他非数字字符串会被替换为空,再通过判断替换前后的字符串长度,则可之后该号码是否有效。

其中,trim 函数用于去除指定字符的前后空格。

ltrim 函数用于去除指定字符的前面空格。

rtrim 函数用于去除指定字符的后面空格。

应用2

如果想保留某些特定字符,筛选掉其他的。比如筛掉汉字保留数字,则可以:

先把数字筛选掉:

select translate('你我3阿斯蒂芬2的6撒谎8发', '#0123456789', '#') as col from dual;
-- 你我阿斯蒂芬的撒谎发

再用筛选出的汉字去筛选原来的语句留下数字:

select translate('你我3阿斯蒂芬2的6撒谎8发','#'||translate('你我3阿斯蒂芬2的6撒谎8发', '#0123456789', '#'),'#') as col from dual;
-- 3268

应用3

如果有2个字符串都是数字字符,其中数字字符的顺序不同,且每个字符只出现一次,通过灵活用法可判断两个字符串包含的数字是否完全一致。

select 1 from dual
where translate('0123456789','123','aaaaaa') = translate('0123456789','132','aaaaaa')
-- 1

where中的等式成立,包含数字一致。

参考链接1:oracle中的替换函数replace和translate函数

参考链接2:ORACLE中的字符串替换 replce、regexp_replace 和 translate

参考链接3:oracle 中translate的基本用法

oracle学习笔记:字符串替换 replace、regexp_replace、translate函数的更多相关文章

  1. Oracle学习笔记:使用replace、regexp_replace实现字符替换、姓名脱敏

    在数据库中难免会遇到需要对数据进行脱敏的操作,无论是姓名,还是身份证号. 最近遇到一个需求,需要对姓名进行脱敏: 姓名长度为2,替换为姓+*: 姓名长度为3,替换中间字符为*: 姓名长度为4,替换第3 ...

  2. Python3字符串替换replace(),translate(),re.sub()

    Python3的字符串替换,这里总结了三个函数,replace()和translate()和re.sub() replace() replace() 方法把字符串中的 old(旧字符串) 替换成 ne ...

  3. oracle学习笔记(九) SQL常用函数说明以及使用

    SQL常用函数说明以及使用 以下补充以下常用的函数,更多的请看oracle函数API文档 to_char to_char(8.58,'9.99') to_char(8.50,'9.00') to_ch ...

  4. oracle学习笔记(二十) 子程序——函数与触发器

    子程序--函数 语法 之前select语句中使用的函数,都是SQL内置函数,我们可以通过自定义函数更满足我们的需要. 自定义函数的语法和存储过程差不多. create [or replace] $fu ...

  5. Oracle学习笔记之四,SQL语言入门

    1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...

  6. oracle学习笔记第一天

    oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字   1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...

  7. Oracle学习笔记之四sp1,Oracle 11g的常用函数

    从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i)    分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...

  8. 《python基础教程(第二版)》学习笔记 字符串(第3章)

    <python基础教程(第二版)>学习笔记 字符串(第3章)所有的基本的序列操作(索引,分片,乘法,判断成员资格,求长度,求最大最小值)对字符串也适用.字符串是不可以改变的:格式化输出字符 ...

  9. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

随机推荐

  1. MVC中利用ActionFilterAttribute过滤关键字

    在开发过程中,有时候会对用户输入进行过滤,以便保证平台的安全性.屏蔽的方法有很多种,但是今天我说的这种主要是利用MVC中的ActionFilterAttribute属性来实现.由于MVC天然支持AOP ...

  2. &lbrack;Json&period;net&rsqb;快速入门

    引言 有个朋友问了一个如何更方便的解析json格式字符串,之前也没怎么研究过json.net,就上网帮他查了一下,现学现卖的给他整了一个demo,这才发现json.net的强大,用着很方便. Json ...

  3. KeyPress事件

    在做一个小demo的时候,发现在文本框中输入一个数字,按下“+”,数字增加了,但是“+”仍旧存在的问题,解决方案:提前执行键盘press事件 private void txtNum_KeyPress( ...

  4. java获取项目地址或tomcat绝对地址

    在java项目中获取文件的路径,不管是相对路径还是绝对路径,其本质都是通过绝对路径去寻找. 获取项目地址 request.getSession().getServletContext().getRea ...

  5. Java并发之BlockingQueue的使用

    Java并发之BlockingQueue的使用 一.简介 前段时间看到有些朋友在网上发了一道面试题,题目的大意就是:有两个线程A,B,  A线程每200ms就生成一个[0,100]之间的随机数, B线 ...

  6. WebService关于Unable to find required classes &lpar;javax&period;activation&period;DataHandler and javax&period;mail&period;internet&period;MimeMultipart&rpar;问题解决

    错误原因:需要mail.jar和activation.jar. Solution:Web Services Required Jars Download Instructions http://www ...

  7. Spring框架中IoC&lpar;控制反转&rpar;的原理(转)

    原文链接:Spring框架中IoC(控制反转)的原理 一.IoC的基础知识以及原理: 1.IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作, ...

  8. bat设置windows计划任务

    设置定时任务 @echo off set NAME=dailybackup :: set DAY=MON,TUE,WED,THU,FRI,SAT,SUN set COMMAND=cscript.exe ...

  9. HDU 2061 Treasure the new start&comma; freshmen&excl;

    http://acm.hdu.edu.cn/showproblem.php?pid=2061 Problem Description background:A new semester comes , ...

  10. SQL创建数据库、建表、填入内容

    --创建数据库 create database Information go --使用数据库 use Information go --创建表 create table Student ( Sno ) ...