详细讲解Oracle中DECODE()函数的使用法
DECODE()函数,它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。
0 T( w& k4 r9 y5 F- h区别于SQL的其它函数,DECODE函数还能识别和操作空值。
5 m7 O7 W& @& ]) h% s语法:DECODE(control_value,value1,result1[,value2,result2…][,default_result]); 0 F, I9 u" M6 d' A
control _value试图处理的数值。DECODE函数将该数值与后面的一系列的偶序相比较,以决定返回值。
6 Z' o7 s, }( R& t' h3 A" L! ?9 Pvalue1是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果将被返回。对应一个空的返回值,可以使用关键字NULL于之对应 7 O" s; o6 S$ Y" I- K
result1 是一组成序偶的结果值。
8 x; d; c3 t7 B Odefault_result 未能与任何一个值匹配时,函数返回的默认值。
6 F# t, Z5 P: F$ d9 e& ]例如: # h0 [; {3 H1 ~* B
selectdecode( x , 1 , ‘x is 1 ’, 2 , ‘x is 2 ’, ‘others’) from dual
\5 E3 b+ ^% r- C+ X R/ _当x等于1时,则返回‘x is 1’。 : S7 k; ]1 C) Z/ e" f( c( v- W, c- u
当x等于2时,则返回‘x is 2’。
1 t. Y9 [. ~: p& ^4 U. K. U1 D T否则,返回others’。
% c% c9 b- }) X% a& }需要,比较2个值的时候,可以配合SIGN()函数一起使用。 ' s& K% {* Z7 _& P( G6 S* x5 A
SELECT DECODE( SIGN(5 -6), 1 'Is Positive', -1, 'Is Nagative', 'Is Zero') 8 h& X- O- Y) w9 @! R
同样,也可以用CASE实现:
]( x: K( q5 S: x1 u& W: P
6 {7 x( y# G( l+ R' B7 s* {) O
- i6 _# j' d8 }- A) R$ J4 w. v' {+ h
0 H2 J6 u2 t4 D b) V# A
4 q# d5 [1 V3 d' k" l+ B) fSELECT CASE SIGN(5 - 6)
/ f. A3 t* `5 [8 F$ @$ u8 kWHEN 1 THEN 'Is Positive'; n- Y: ~$ P! q& v% @
WHEN -1 THEN 'Is Nagative'
$ O6 ]6 A3 i4 |+ N; k8 t4 X- K, bELSE 'Is Zero' END
" |) |- `+ I* ]* I2 S) P% d1 S& p5 U) VFROM DUAL
, q& S3 u3 \3 b6 Y此外,还可以在Order by中使用Decode。
0 u9 S6 \: i* J3 V& d1 ]6 j6 \例如:表table_subject,有subject_name列。要求按照:语、数、外的顺序进行排序。这时,就可以非常轻松的使用Decode完成要求了。
9 Q# b* M1 Q& t% O2 w% B6 wselect * from table_subject order by decode(subject_name, '语文', 1, '数学', 2, , '外语',3)
点击图标进入精品网摘收藏 欢迎大家加入网络收藏夹