2014-06-06 32 views
1

專家...在sql查詢中使用解碼

我想解決以下簡單的查詢以包含空條件。

我可以在where子句中使用「IS NOT NULL」並忽略記錄,但是這又不是最好的方法。想要以正確的方式解決這個問題。

在當前解碼進程下方列出所有進程,並用JDBC替換「1234 @ xzy」,「1234 @ abc」。當列表中有空時,此解碼在腳本中無法正常工作。

問題: 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  
[email protected]  
[email protected]  
    (null) 
9658 

回答

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; 
+0

的偉大工程,我是響應時間打動......謝謝你......我用NVL/NVL2玩,但沒沒有想到加入解碼... – homer