【问题标题】:Converting IIF statement to Decode oracle将 IIF 语句转换为 Decode oracle
【发布时间】:2021-08-26 05:23:33
【问题描述】:

如何将以下 IIF 语句转换为 oracle decode 语句:

IIF(lkp_LAST_NAME1 = 'Unknown', lkp_LAST_NAME1,
IIF(lkp_FIRST_NAME1 =' ' OR lkp_MIDDLE_NAME1 = ' ',lkp_LAST_NAME1,
IIF(ISNULL(lkp_LAST_NAME1), lkp_FIRST_NAME1 || ' ' || lkp_MIDDLE_NAME1,
IIF((ISNULL(lkp_FIRST_NAME1) AND ISNULL(lkp_MIDDLE_NAME1)), lkp_LAST_NAME1,
lkp_LAST_NAME1 || ', ' || lkp_FIRST_NAME1 || ' ' || lkp_MIDDLE_NAME1))))

【问题讨论】:

  • decode 不允许内部条件,但在提供的值列表上“循环”并在第一次匹配时退出(如case <expr> wnen <value1> then <out1> ... end 所做的那样)。所以需要重写为searchedcase表达式
  • @astentx 那么你的意思是说它可以写在case when语句而不是decode对吗?
  • 是的。唯一方便的解码应用程序是值列表的映射,它也允许空值处理(我的意思是decode(val, null, something, val1, res1) 按书面形式工作,但case doesn't process null 在枚举中。所有其他条件处理都是针对case。这是因为 Oracle 没有用于枚举的布尔类型

标签: oracle oracle11g oracle10g


【解决方案1】:

CASE 应该照顾它

case 
  when  lkp_LAST_NAME1 = 'Unknown' then   lkp_LAST_NAME1
  else 
    case when lkp_FIRST_NAME1 =' ' OR lkp_MIDDLE_NAME1 = ' ' then lkp_LAST_NAME1
    else 
      case when lkp_LAST_NAME1 is null then lkp_FIRST_NAME1 || ' ' || lkp_MIDDLE_NAME1
      else
        case when lkp_FIRST_NAME1 is null and lkp_MIDDLE_NAME1 is null then lkp_LAST_NAME1
        else lkp_LAST_NAME1 || ', ' || lkp_FIRST_NAME1 || ' ' || lkp_MIDDLE_NAME1
        end
      end
    end
  end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多