Oracle Decode()函数使用技巧分享
今天上头要求做一个类似的功能,初步想到的列转行,但是如何实现也没有什么好办法,这个函数不错DECODE函数是ORACLE PL/SQL是功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其他数据库厂商的SQL实现还没有此功能。DECODE有什么用途 呢? 先构造一个例子,假设我们想给智星职员加工资,其标准是:工资在8000元以下的将加20%;工资在8000元以上的加15%,通常的做法是,先选出记录 中的工资字段值? select salary into var-salary from employee,然后对变量var-salary用if-then-else或choose case之类的流控制语句进行判断。 如果用DECODE函数,那么我们就可以把这些流控制语句省略,通过SQL语句就可以直接完成。如下:select decode(sign(salary - 8000),1,salary1.15,-1,salary1.2,salary from employee 是不是很简洁? DECODE(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值) (字段,比较1,值1,比较2,值2,.....,比较n,值n缺省值)IF 条件=值1 THEN RETURN(翻译值1) ELSIF 条件=值2 THEN RETURN(翻译值2) ...... ELSIF 条件=值n THEN RETURN(翻译值n) ELSE RETURN(缺省值) END IF
85,显示优秀;>70显示良好;>60及格;否则是不及格。 select id,decode(sign(score-85),'优秀', decode(sign(score-70),'良好', decode(sign(score-60),'及格','不及格'))) from student; decode (expression,search_1,result_1) decode (expression,result_1,search_2,result_2) decode (expression,result_2,....,search_n,result_n) decode (expression,result_n,default) 以下是一个简单测试,用于说明Decode函数的用法:
select * from t; ------------------------------ ------------------------------ ---------
SQL> select username,decode(lock_date,null,'unlocked','locked') status from t; ------------------------------ --------
select username,'unlocked') status from t; ------------------------------ -------- (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |