a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 179|回复: 1

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

[复制链接]
发表于 2012-8-4 13:41:06 | 显示全部楼层 |阅读模式
简要斗劲:     replace:字符串级此外庖代& C; h. b9 Y3 }4 u
    如:SELECT REPLACE('acdd','cd','ef') FROM dual; →aefd
5 L: i& d. U6 C5 |+ b    translate:字符级此外庖代$ Q! N# \" Y% D2 \6 L5 o
    如:SELECT TRANSLATE('acdd','cd','ef') FROM dual; →aeff9 y: h( G7 t" x) ?- d! M
    分袂详解:1 {% G, E$ z# S, F5 [7 A8 ?2 D
    replace:. C6 N, ]. {8 K
    语法:REPLACE ( char , search_string [, replacement_string] )
2 m! t# q' r1 x+ l# e: d# W0 D# X" H    诠释:repalce中,每个search_string都被replacement_string所庖代。
2 E) Z( n* b1 n" _    select replace('acdd','cd','ef') from dual;→ aefd
) j4 \5 w- P- R2 K    如不美观replacement_string为空或为NULL,那么所有的search_string都被移除。
" O# d/ q9 l- L% |4 G    select replace('acdd','cd','') from dual;→ad
3 Z) i+ g1 O# Y% m    如不美观search_string为null,那么就返回原本的char。6 s' f8 ?$ U6 J0 |- K8 l
    select replace('acdd','','ef') from dual;→acdd1 h+ h  o- o. U9 V, n! H+ v
    select replace('acdd','','') from dual;→acdd(也是两者都为空的情形)
  F6 l! J" [5 T% p& i* y% ^/ O    translate:
7 x* t, Z/ z4 ~/ u* B3 I    语法:TRANSLATE ( 'char' , 'from_string' , 'to_string' )
# @& t% j: w6 r( |& M    诠释:Translate中,每个from_string中的字符被to_string中响应的字符所庖代。* w% a+ B. W! c
    select translate('acdd','cd','ef') from dual;→aeff
: @6 r$ n  G( V; B    如不美观from_string比to_string长,那么from_string中多余的字符将被移除。4 `- _. x) Q2 W) \: T- g& c
    select translate('acdd','acd','ef') from dual;→ef (a由e庖代,c由f庖代,d就被移除)9 R$ }7 b7 J+ b1 z
    select translate('acdd','cda','ef') from dual;→eff(c由e庖代,d由f庖代,a就被移除)' \% V' V6 J) r, i* \4 c0 X) {
    如不美观to_string为空,或者两者都为空,那么返回char也为空。所以to_string不能为空。
3 Q4 v- `* x- I* o+ Z9 O5 u' \    select translate('acdd','cd','') from dual;→ (空)
+ u7 C4 {. J5 Q" o
, n3 q. z+ d9 [    select translate('acdd','','') from dual;→(空)
回复

使用道具 举报

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

Oracle认证:详解replace和translate函数

</p>    拭魅战:+ u  N9 w; [% x7 U; ^7 _3 a) H4 y: Y
    若何判定一个字符串是否是数字?
% l; n1 ]+ }" B3 {7 p    解:先转换:因为to_string不能为空,我们巧用#号庖代6 S! P0 E- \8 K1 u5 g
    select translate('abc123','#1234567890.','#') from dual;→abc
- T% N+ {0 ~# e: [" g    from_string中的#被to_string中的#庖代,但char中又没有#字符,所以经由过程这一步躲开了to_string必需不为空的轨则。然后后面的数字以及小数点都转换为空,于是原本的字符串中只留下abc三个字符。
/ R, Q( y4 ^" p% d( q    转换好后,用nvl2判定即可:
+ x% f" r+ l7 l4 ]4 s! `* ^    select nvl2(translate('abc123','#1234567890.','#'),'字符串','数字') from dual;→字符串8 C! d8 H) y# r8 x" N! }
    nvl2的浸染就是,NVL2 (expr1, expr2, expr3) ->expr1不为NULL,返回expr2;为NULL,返回expr3。这样我们就可以判定一个字符串是否是数字了!解毕!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 22:23 , Processed in 0.176154 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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