【发布时间】: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)按书面形式工作,但casedoesn't process null 在枚举中。所有其他条件处理都是针对case。这是因为 Oracle 没有用于枚举的布尔类型
标签: oracle oracle11g oracle10g