`
sllizhimei
  • 浏览: 163543 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle 中的replace和translate函数 以及关键字过滤

阅读更多
文章出处:
http://hi.baidu.com/oldwolfcn/blog/item/e164272a98c11f25d52af15b.html


正文:

Oracle 中的replace和translate函数 以及关键字过滤replace(str1,str2,str3)是把str1中的所有str2字符串替换成str3。

replace(str1,str2)是把str1 中的所有str2字符串去掉,也就是替换成''。


translate

一、语法:
TRANSLATE(string,from_str,to_str)
二、目的
返回将(所有出现的)from_str中的每个字符替换为to_str中的相应字符以后的string。TRANSLATE 是 REPLACE 所提供的功能的一个超集。如果 from_str 比 to_str 长,那么在 from_str 中而不在 to_str 中的额外字符将从 string 中被删除,因为它们没有相应的替换字符。to_str 不能为空。Oracle 将空字符串解释为 NULL,并且如果TRANSLATE 中的任何参数为NULL,那么结果也是 NULL。
三、允许使用的位置
过程性语句和SQL语句。
四、示例
SELECT TRANSLATE('abcdefghij','abcdef','123456') FROM dual;
TRANSLATE (
--------------
123456ghij

SELECT TRANSLATE('abcdefghij','abcdefghij','123456') FROM dual;
TRANSL
----------
123456


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

translate的主要作用是提取,替换字符串,其作用有时候和replace差不多.具体看下面的例子
select translate('liyan4h123ui','#liyanhui','#') from dual
结果:4123
select translate('liyan4h123ui','#liyanhui','#z') from dual;
结果:z4123
select translate('liyan4h123ui','#liyanhui','#zx') from dual;
结果:zx4123x
select translate('asadad434323', '#0123456789','#') from dual
结果:asadad
======================================

利用TRANSLATE实现关键字的过滤
有时候需要对一些关键词语进行过滤,直接使用replace的话,可能由于这些关键词语比较多而要嵌套使用,语句也不好写,同时也浪费资源。这种情况其实可以使用TRANSLATE和replace组合使用就能完全达到目的了。

比如要将“深圳”、“北京”等作为关键词语,在显示内容是要将这些词语过滤掉不显示:

--首先使用TRANSLATE将关键词语统一转换成一个特殊的字符串,比如这里的X
SQL> select TRANSLATE('上海北京天津重庆广州深圳武汉','深圳北京','XXXX') from dual;

TRANSLATE('上海北京天津重庆广?
------------------------------
上海XX天津重庆广州XX武汉

--然后用replace将特殊的字符串替换掉。注意:不能用TRANSLATE直接将关键词语直接转换为''字符串
SQL> select replace(TRANSLATE('上海北京天津重庆广州深圳武汉','深圳北京','XXXX'),'X') from dual;

REPLACE(TRANSLATE('上海北京天?
------------------------------
上海天津重庆广州武汉

SQL>

--但是,用TRANSLATE是以一个字符为单位的,只要匹配到都会转换。比如不管“北”和“京”是否连接在一起都会做转换
SQL> select TRANSLATE('上海京天津重庆北广州深圳武汉','深圳北京','XXXX') from dual;

TRANSLATE('上海京天津重庆北广?
------------------------------
上海X天津重庆X广州XX武汉

SQL>

补充:TRANSLATE(string,from,to)转换的两个注意点——
1、转换源字串(from)在目的字串(to)中不存在对应,则转换后被截除
2、转换目的字串(to)不能为'',''在oracle中被视为空值,因此无法匹配而返回为空值

另外,一个汉字作为一个字符还是两个字符进行转换与字符集的设置相关。
select TRANSLATE('kkaxksx', 'kx', '12') from dual
结果:11a21s2
分享到:
评论

相关推荐

    ORACLE replace和translate函数详解

    ORACLE replace和translate函数详解

    Oracle 函数replace和translate的比较

    今天看了SQL COOKBOOK中的一个例子,其中看到了两个函数Replace和Translate时产生了疑惑,感觉这两个函数的作用是一样的,书上面的例子也看的不是很明白,Google了一下,看了Oracle的官方解释,终于彻底明白了。...

    Oracle中的translate函数和replace函数的用法详解

    translate返回expr,其中from_string中的每个字符的所有出现都被to_string中的相应字符替换,而replace 函数将char中的字符串search_string...下面给大家分享Oracle中的translate函数和replace函数的用法,一起看看吧

    Oracle_Database_11g完全参考手册.part2/3

    附录部分内容丰富、便予参照,包括Oracle命令、关键字、功能以及函数等。 目录 第1部分 关键的数据库概念 第1章 OracleDatabase11g体系结构 1.1 数据库和实例 1.2 数据库技术 1.2.1 存储数据 1.2.2 数据保护 1.2.3...

    Oracle_Database_11g完全参考手册.part3/3

    附录部分内容丰富、便予参照,包括Oracle命令、关键字、功能以及函数等。 目录 第1部分 关键的数据库概念 第1章 OracleDatabase11g体系结构 1.1 数据库和实例 1.2 数据库技术 1.2.1 存储数据 1.2.2 数据保护 1.2.3...

    oracle使用管理笔记(一些经验的总结)

    13.oracle函数 26 (1)字符函数 26 (2)数学函数 26 (3)日期函数 27 (4)给表取别名的时候,不能加as;但是给列取别名,是可以加as 27 (5)转换函数 27 (6) to_char(date,'format') 27 (7) to_date(string,'format') 28 ...

    Oracle自定义判断数据是否为数值函数

    1 CREATE OR REPLACE FUNCTION isnumeric (str IN VARCHAR2) 2 RETURN NUMBER 3 IS 4 v_str VARCHAR2 (1000); 5 BEGIN 6 IF str IS NULL 7 THEN 8 RETURN 0; 9 ELSE 10 v_str := translate(str, '....

    Oracle8i_9i数据库基础

    §16.4 过程和函数中的例外处理 282 §16.4.1 使用系统定义的例外处理 282 §16.4.1.1 没有例外处理的缺点 283 §16.4.1.2 使用预定义的例外处理 283 §16.4.2 使用用户定义的例外处理+ 286 §16.4.2.1 定义的用户...

    Oracle事例

    20.oracle8中扩充了group by rollup和cube的操作。有时候省了你好多功夫的。 下面的语句可以进行总计 select region_code,count(*) from aicbs.acc_woff_notify group by rollup(region_code); <2> 对第1个字段...

    SQL21日自学通

    从外部数据源中导入和导出数据169 Microsoft Access 170 Microsoft and Sybase SQL Server 171 Personal Oracle7171 总结172 问与答172 校练场173 练习173 第九天创建和操作表174 目标174 CREATE DATABASE 语句174 ...

    C# 访问Oracle示例+PL/SQL+存储过程+触发器 完整示例 测试可用 易懂

    C# 访问Oracle示例+PL/SQL+存储过程+触发器 完整示例 测试可用 --PL/SQL基础1 declare begin dbms_output.('不输出不换行'); dbms_output.put_line('输出并换行'); end; --PL/SQL基础2 declare dig number(20,...

    精髓Oralcle讲课笔记

    -- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unlock; --那么这个用户名就能使用了。 --(默认全局数据库名orcl) 1、...

    21天学习SQL V1.0

    REPLACE ........................................................................................................ 84 SUBSTR.................................................................................

Global site tag (gtag.js) - Google Analytics