在sql查询中使用decode

时间:2014-06-06 21:40:42

标签: sql oracle decode

专家...

我正在尝试修复以下简单查询以包含空条件。

我可以在where子句中使用“IS NOT NULL”并忽略记录,但这不是最好的方法。想以正确的方式解决这个问题。

在当前解码过程下面列出所有进程并用JDBC替换“1234 @ xzy”,“1234 @ abc”。当列表中存在null时,此解码在脚本中无法正常工作。

问题: 1.是否可以修改当前解码以用NA替换null?

Query in oracle:

SELECT osuser, machine,
       DECODE (process, '1234', 'JDBC', substr(process, 1, instr(process || '@','@')-1)) "PID"
FROM v$session
WHERE username IS NOT NULL;

Expected Result:
=============== 
4567    
78960    
4575    
JDBC    
JDBC    
NA    
9658

Process list:
=============
4567    
78960    
4575    
1234@abc    
1234@xyz    
   (null)
9658

1 个答案:

答案 0 :(得分:1)

您可以使用decode表达式包装nvl表达式:

SELECT osuser, machine,
       NVL(DECODE (process, 
                   '1234', 'JDBC', 
                    substr(process, 1, instr(process || '@','@')-1)), 
           'NA') "PID"
FROM   v$session
WHERE  username IS NOT NULL;