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

写在最后

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

相关推荐:

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

时间: 2024-11-04 03:49:13

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

oracle decode函数的用法

oracle decode函数,不管查询的结果是否满足'PRIMARY',参数中的select语句还是会执行的,通过查看执行计划就知道 set autotrace traceonly select decode(database_role ,'PRIMARY', (select trunc((size_MB-free_MB)*100/maxsize_MB) "retvalue" from ( select tablespace_name,case when sum(decode(aut

Oracle DECODE函数的用法详解

Oracle DECODE函数使用方法: 1.比较大小select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值sign()函数根据某个值是0.正数还是负数,分别返回0.1.-1例如:变量1=10,变量2=20则sign(变量1-变量2)返回-1,decode解码结果为"变量1",达到了取较小值的目的.2.此函数用在SQL语句中,功能介绍如下:Decode函数与一系列嵌套的 IF-THEN-ELSE语句相似.base_exp与co

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或cho

oracle 实时查询最耗CPU资源的SQL语句

1. 先通过top命令查看产用资源较多的spid号 2.查询当前耗时的会话ID,用户名,sqlID等: select sid,serial#,machine,username,program,sql_hash_value,sql_id,        to_char(logon_time,'yyyy/mm/dd hh24:mi:ss') as login_time from v$session where paddr in (select addr from v$process where sp

Oracle 学习之性能优化(一)SQL语句处理

当向Oracle提交一个sql命令时,Oracle到底做了哪些事情?对这个问题有很好的理解,能帮助你更好的分析sql语句的优化. 执行一条sql语句从开始到结束,需要经历4个步骤: 分析--对提交的语句进行语法分析.语义分析和共享池检查. 优化--生成一个可在数据库中用来执行语句的最佳计划 行资源生成--为会话取得最佳计划并建立执行计划 语句执行--完成实际执行查询的行资源生成步骤的输出.对应DDL来说,这一步就是语句的结   束.对应SELECT来说,这一步是取数据的开始. 以上步骤,有的是可

Oracle Decode函数的使用

DECODE函数的可以根据用户给定的判定条件给定想要的结果 语法: DECODE(expr,{search,result,}-.,default) 这里给的search,result可以是多个,而括号里所有元素的组合最多是255个. 今天在写一个语句的时候有一个简单的想法,就是遇到数值的进行自动换算,遇到字符返回原值 selectname,value from v$parameter wherenamein ('control_file_record_keep_time', 'db_block_

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

oracle decode函数和 sign函数

流程控制函数 DECODE decode()函数简介: 主要作用: 将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明): 使用方法: Select decode(columnname,值1,翻译值1,值2,翻译值2,-值n,翻译值n,缺省值) From talbename Where - 其中columnname为要选择的table中所定义的column, 含义解释: decode(条件,值1,翻译值1,值2,翻译值2,-值n,翻译值n,缺省值)的理解如下: if (条件==值1) t

Oracle decode函数 除数为零

decode (expression, search_1, result_1)如果 expression结果=search_1结果,则返回result_1,类似 if elsedecode (expression, search_1, result_1, search_2, result_2)decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n)decode (expression