oracle函数类似于解码,但更简单

时间:2012-11-15 22:03:03

标签: sql oracle function

在oracle中,我可以在" if,then else"中使用函数decode。方式。

例如:

  

DECODE(XXXX,' TEST',NULL,XXXX)

所以上面说的是#34;如果XXXX =' TEST',则为NULL,否则为XXXX"。

现在得到了我想要的结果,但是有一个更短的方法(也许是一个本机函数),可以这样编写它:

DECODE(XXXX,'TEST',NULL)

基本上,如果第一个参数=' TEST',则输出NULL,否则输出第一个参数。

有点像NVL,如果NVL不为空,NVL将返回第一个参数。

我很好奇,因为我的一些陈述很长,在函数中输出两次所需的输出似乎很浪费。

我知道我可以制作一个自定义功能,但只是好奇,如果已经有一个。

希望有意义!

1 个答案:

答案 0 :(得分:4)

在这种特殊情况下,您可以使用NULLIF()

SQL> ed
Wrote file afiedt.buf

  1  with x as (
  2    select 1 id, 'foo' str from dual union all
  3    select 2, 'TEST' from dual
  4  )
  5  select id,
  6         nullif( str, 'TEST' )
  7*   from x
SQL> /

        ID NULL
---------- ----
         1 foo
         2

就个人而言,我倾向于选择更冗长的CASEDECODE,而不是使用一些更深奥的内置函数,因为它更有可能是谁更需要维护未来的代码将更容易遵循代码应该做的事情。