oracle decode()函数的参数原来可以为sql语句!
Posted Marydon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle decode()函数的参数原来可以为sql语句!相关的知识,希望对你有一定的参考价值。
1.情景展示
判断某个字段的值,如果以APP开头,需查询APP表里对应的数据;如果是以JG开头,就查询机构对应的表。
2.原因分析
如果使用CASE WHEN THEN或者IF ELSIF 太麻烦,可以通过decode()函数实现哦。
语法说明:
DECODE(VALUE,IF1,THEN1,IF2,THEN2,ELSE) 是对CASE WHEN 的简化
我们对于decode()函数的应用一般是这样的
SELECT decode(t.medstepcode, \'010101\', \'挂号\', \'010102\', \'诊断\', \'010103\', \'取药\', \'010104\', \'检查\', \'010105\', \'收费\', \'010106\', \'开方\', \'010107\', \'手术\', \'000000\', \'其他\', \'挂号\') medStepName /* 诊疗环节名称 */ FROM VIRTUAL_CARDLOG T
这样,查询结果会将对应的数字字符串替换文字。
3.解决方案
错误用法:直接跟sql
结果执行报错。
正确用法:sql需要用括号包住即可。
SELECT to_char(t.logtime, \'yyyyMMdd-HH24mmss\') time /* 用卡时间 */, \'0\' cardType, /* 电子健康卡 */ t2.id_card atr, /* 身份证号 */ t2.identifier issueOrgCode, /* 发卡机构代码 */ (decode(instr(t2.identifier, \'APP\'), 0, /* 不是以APP开头 */ (select t3.orgname from org_access t3 /* 接入机构 */ where t3.id = t2.identifier), (select t4.appname from app_access t4 /* 接入APP */ where t4.id = t2.identifier))) issueOrgName /* 发卡机构名称 */ FROM VIRTUAL_CARDLOG T, VIRTUAL_CARD T2 WHERE T.VIRTUAL_ID = T2.ID
说明:instr()函数是判断某个字符串内是否包含指定字符串,在这里不影响判断。
4.结果展示
说明:虽然decode()可以使用sql语句,但也仅限于该SQL的查询结果只能返回一个值,否则就会报错。
以上是关于oracle decode()函数的参数原来可以为sql语句!的主要内容,如果未能解决你的问题,请参考以下文章