1

在 oracle 中,我可以decode以“if, then else”的方式使用该函数。

例如:

解码(XXXX,'TEST',NULL,XXXX)。

所以上面说的是“如果 XXXX = 'TEST',则为 NULL,否则为 XXXX”。

现在得到了我想要的结果,但是有没有更短的方法(也许是一个 nativefunction)可以这样写:

DECODE(XXXX,'TEST',NULL)

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

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

我只是好奇,因为我的一些语句很长,在一个函数中两次获得所需的输出似乎很浪费。

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

希望这是有道理的!

4

1 回答 1

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而不是使用一些更深奥的内置函数,因为将来必须维护代码的人更有可能更容易遵循代码应该在做。

于 2012-11-15T22:11:41.597 回答