首页 > 数据库 >ORACLE translate函数

ORACLE translate函数

时间:2024-01-23 20:58:05浏览次数:50  
标签:字符 函数 对应 字符串 参数 ORACLE translate 替换 string

 

1. 语法

 

 

2.用途

   (1) translate的返回值,是将expr(源字符串)参数中,所有对应在from_string(源字符串中想要被替换的字符)参数中所出现的字符,均按from_string参数中在to_string(想要源字符串中被替换的对应目标字符)参数中对应的字符替换掉后的值。expre源字符串中有但from_string参数中没有的字符,当然就不被替换;

 

栗子:

 

SELECT TRANSLATE('123x21','3','1') FROM DUAL;

 

 

 

 

可见3被换成了1。这时与replace函数作用类似。

但translate与replace不同之处在于,他能够单独替换一个字符,而replace是字符整体替换:

 

SELECT TRANSLATE('123x2y1','xy','ab') FROM DUAL;

 

 

可见x,y字符被分别对应替换成了a,b,而replace的话使用'xy'整体字符替换是起不到作用的,因为源字符串中并没有整体字符串'xy'.

   (2) from_string参数中可以比to_string参数中包含更多的字符。因此,当出现这种情况时,在from_string参数后面部分字符,在to_string参数里找不到对应的字符。而此时如果源字符串expr参数中又含有在from_string参数中多余(即按一一对应原则,在to_string中找不到对应位置的字符)字符,那么最终返回值中源字符串expr中的这些字符将会被剔除:

 

 

SELECT TRANSLATE('123x2y1','xy','a') FROM DUAL;

 

 

 

 

可见,x对应a,而y并无对应字符,因此源字符串中x被替换成a,而y字符返回时直接被剔除。

   (3) 如果在from_string参数中有多个相同字符,那么它将被to_string参数中与其对应的第一个字符所替换:

 

 

SELECT TRANSLATE('123xxxx2y1','xxx','abc') FROM DUAL;

 

 

 

 

可见,from_string参数中出现三个相同的x,to_string中虽然也定义也与其对应的a,b,c三个字符,但最终源字符中所有的x字符还是被匹配的第一个字符a所替换。

   (4) to_string参数使用空字符串(注意并不是指空格,也不是指这个参数直接缺失,而是指这个参数不包含任何字符,只有两个单引号),并不能在返回值中移除掉全部在from_string参数中的字符.Oracle数据库将空字符识别为null值,而translate函数在以null值为to_string参数值时,最终只会返回null:

 

 

SELECT TRANSLATE('123xxxx2y1','xxx','') FROM DUAL;

 

 

 

 

而如果to_string参数为空格的话,则会正常按空格替换。

   (5) 上述to_string参数定义为空字符串无法去除掉源字符串中所有from_string中的字符,因此,想要达到这种目的,迂回作战,可以在from_string参数前面连接一个在expr源字符串中并没有的字符,然后to_string参数同样的,随便定义一个expr中并没有的字符,一般就直接使用from_string参数前的连接字符了:

 

 

select translate('A1234567','!123' ,'&') from dual;

 

 

 

 

可以看到,源字符串中想要去除的1,2,3三个字符,均被去除掉。这个写法实际上就是按from_string与to_string字符一一对应的原则,!与&字符对应替换,但源字符串中并没有,所以猫的任何作用,而后面1,2,3三个字符,在to_string中并没有对应的可替换字符,因此,按前述原则,translate在返回时直接在源字符串中剔除。

   最后,看一个官方的例子:

 

 

SELECT TRANSLATE('SQL*Plus User''s Guide', ' */''', '___') FROM DUAL;

 

 

 

 

此处需要注意的是,源字符串expr参数与from_string参数中,均含有一个单引号字符,另一个单引号用来转义。即源字符串实际为:SQL*Plus User's Guide ,而from_string参数实际为 ' */'' ,即空格,星号,斜杠,单引号,to_string参数为三个半角下划线,因此,实际from_string参数中前三个字符分别对应一个下划线,而最后的单引号,没有对应可替换字符,直接剔除。如此便可得目标结果 。如果单引号不使用转义,直接用ascii代替换,也可得到相同结果 :

 

 

参考文档:https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/About-SQL-Functions.html#GUID-D51AB228-518C-4213-8BD4-F919623D105E

标签:字符,函数,对应,字符串,参数,ORACLE,translate,替换,string
From: https://www.cnblogs.com/rogerfederer/p/17983396

相关文章

  • [转帖]Oracle 12.2 新特性 | PDB不同字符集变更
    https://www.cnblogs.com/cqdba/p/8bef7c432b87807c0680d6791f427b09.html 在oracle12.1版本中,同一CDB中的所有PDB使用的都是相同的字符集,并且Plug-in时PDB也要和目标CDB相同字符集或者是子集,否则plug-in时会失败在PDB_PLUG_IN_VIOLATIONS视图提示,这样影响了PDB的迁移灵活......
  • 走出大模型部署新手村!小明这样用魔搭+函数计算
    作者:拓山前文介绍了魔搭ModelScope社区模型服务SwingDeploy服务。开发者可以将模型从魔搭社区的模型库一键部署至阿里云函数计算,当选择模型并部署时,系统会选择对应的机器配置。按需使用可以在根据工作负载动态的减少资源,节约机器使用成本。5分钟完成从开源模型至模型推理API服......
  • [转帖]能使 Oracle 索引失效的六大限制条件
    Oracle索引的目标是避免全表扫描,提高查询效率,但有些时候却适得其反。例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可能是oracle索引失效造成的。oracle索引有一些限制条件,如果你违反了这些索引限制条件,那么即使你已经加了索引,oracle......
  • mysql patition by--分区函数
    分区函数patitionbygroupby是分组函数,partitionby是分区函数partitionby并没有groupby的汇总功能。partitionby统计的每一条记录都存在,而groupby将所有的记录汇总成一条记录(类似于distinctEmpDepartment去重)相同点:groupby后的聚合函数,partionby后的orderby......
  • vue-helper 点击跳转插件 在 methods里面互相调用函数,会产生两个函数definitions ,然后
    vue-helper点击跳转插件在methods里面互相调用函数,会产生两个函数definitions,然后就回弹出框让你选择原因:换了台电脑,又从新配置下vscode"editor.gotoLocation.multipleTypeDefinitions":"goto","editor.gotoLocation.multipleReferences":"goto","editor.got......
  • [转帖]Oracle Exadata X10M 数据库一体机发布,树立 OLTP 数据库性能新标杆
    https://www.modb.pro/db/653936 2023年6月25日消息,Oracle公司继续以其专用的Exadata平台重新定义OLTP数据库性能。上周,该公司延续了这一传统,推出了第十二个Exadata平台,即OracleExadataX10M数据库一体机。X10M的设计目的只有一件事:比市场上任何其他产品更......
  • Oracle AWR报告自动生成异常
    监控平台收集不到wrh$_tablespace_space_usage表数据。awr报告没有任何快照信息。alter日志发现报错:SuspendingMMONslaveactionkewrmafsa_for82800seconds MMON进程trace文件报错如下:UnabletoscheduleaMMONslaveat:AutoFlushMain1Slaveactionhasbeen......
  • Python的sort自定义compare函数
    记住这个规律:1.无论是什么,都先左侧的大,ifx>y:固定写法。2.大的放右边就return1;如果想要大的放左边就return-1;这里记忆是【-1,1】坐标轴上,-1在左侧,1在右侧 #默认sort是左小-右大,的return1#要排序大的,就右侧大的return1defcompare(x,y):ifx>y:......
  • C++函数重载探究
    函数重载什么是函数重载简单来说,就是可以有多个相同函数名的函数,但是这些函数的参数个数 或者参数类型或者参数的类型顺序 是不一样的.通常来处理类似的功能,但是数据个数或者类型不同的情况如:计算器就是一个例子,加法可以是任何个数任何类型的数的加法但是都只......
  • oracle提示错误1033,ora-1033
    oracle提示错误1033,ora-1033制造问题和解决问题 文章标签:oracle提示错误1033系统是winxp,使用Imp导入数据到用户user1的时候,关闭了cmd窗口,结果在删除user1的时候,出现了ora-1033错误。解决办法:>connect/assysdba>shutdown>startupmount>alterdatabaserecoverdataba......