码迷,mamicode.com
首页 > 数据库 > 详细

oracle decode()函数的参数原来可以为sql语句!

时间:2019-03-22 18:48:07      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:语句   ESS   to_char   play   使用   art   电子   time   图片   

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.结果展示

技术图片

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

 

oracle decode()函数的参数原来可以为sql语句!

标签:语句   ESS   to_char   play   使用   art   电子   time   图片   

原文地址:https://www.cnblogs.com/Marydon20170307/p/10579845.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!