a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 183|回复: 1

[其他] Oracle认证:详解replace和translate函数

[复制链接]
发表于 2012-8-4 13:41:06 | 显示全部楼层 |阅读模式
简要斗劲:     replace:字符串级此外庖代' S8 @% K/ M+ z
    如:SELECT REPLACE('acdd','cd','ef') FROM dual; →aefd
3 [; u# S& f, c1 M    translate:字符级此外庖代) `6 R( D, }2 X% s/ Q: e
    如:SELECT TRANSLATE('acdd','cd','ef') FROM dual; →aeff* ~- E4 A' g4 F2 ?  l+ S: b3 {7 \
    分袂详解:
+ H  ^  d3 o8 {    replace:
  a  b5 C6 `: K+ O* `$ ^    语法:REPLACE ( char , search_string [, replacement_string] )% {5 C: u4 z4 N9 [. t4 W
    诠释:repalce中,每个search_string都被replacement_string所庖代。
3 c  ^% H1 l1 E2 d: c2 I) S+ g    select replace('acdd','cd','ef') from dual;→ aefd
% A( Z- W2 Y( Q  L3 G    如不美观replacement_string为空或为NULL,那么所有的search_string都被移除。
' P6 M6 D3 V+ a' `# k. @# u    select replace('acdd','cd','') from dual;→ad
, ?8 a0 v2 m. `+ w4 y' R    如不美观search_string为null,那么就返回原本的char。
1 G' [* Y1 w, Y  p& m    select replace('acdd','','ef') from dual;→acdd
8 y2 @6 j* x% H8 e, w  j1 y    select replace('acdd','','') from dual;→acdd(也是两者都为空的情形)
; t  C6 ]9 I: t* s6 K  T2 r% d8 T    translate:
$ |/ P9 F+ p' E' q3 Z    语法:TRANSLATE ( 'char' , 'from_string' , 'to_string' )' p' e& @3 E7 M/ _
    诠释:Translate中,每个from_string中的字符被to_string中响应的字符所庖代。
. n) o. M6 [5 Q5 y    select translate('acdd','cd','ef') from dual;→aeff
6 w% A& A9 v/ p  \    如不美观from_string比to_string长,那么from_string中多余的字符将被移除。; u/ ]9 H9 y7 H1 Q* L3 V/ x
    select translate('acdd','acd','ef') from dual;→ef (a由e庖代,c由f庖代,d就被移除)9 {' |& ^8 E# H& [
    select translate('acdd','cda','ef') from dual;→eff(c由e庖代,d由f庖代,a就被移除)# ?$ ]) O& ?! H; Y7 M# k9 F. G- s
    如不美观to_string为空,或者两者都为空,那么返回char也为空。所以to_string不能为空。
% C7 d4 U% c5 C9 [% G3 Y6 Y% t    select translate('acdd','cd','') from dual;→ (空)7 X) V. }3 t  D7 W. y8 `, D

5 N- e. h8 Y5 G. U    select translate('acdd','','') from dual;→(空)
回复

使用道具 举报

 楼主| 发表于 2012-8-4 13:41:07 | 显示全部楼层

Oracle认证:详解replace和translate函数

</p>    拭魅战:
) f$ }* Z: F- R2 u2 x    若何判定一个字符串是否是数字?3 L1 _0 y" u  L# a: `$ _  }: w
    解:先转换:因为to_string不能为空,我们巧用#号庖代- ^% E1 f% A4 L' a* z" A
    select translate('abc123','#1234567890.','#') from dual;→abc; i4 _3 [4 S" ?" Z! Q
    from_string中的#被to_string中的#庖代,但char中又没有#字符,所以经由过程这一步躲开了to_string必需不为空的轨则。然后后面的数字以及小数点都转换为空,于是原本的字符串中只留下abc三个字符。: U! u3 L9 X7 `2 m0 K& r! {
    转换好后,用nvl2判定即可:+ U" q9 W0 Z5 T" D
    select nvl2(translate('abc123','#1234567890.','#'),'字符串','数字') from dual;→字符串
7 y1 g6 ~+ N9 ?) o! M    nvl2的浸染就是,NVL2 (expr1, expr2, expr3) ->expr1不为NULL,返回expr2;为NULL,返回expr3。这样我们就可以判定一个字符串是否是数字了!解毕!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-17 17:35 , Processed in 0.236542 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表