2011-07-20 68 views
2

如何設置一組空或空值像一個默認值1到默認?如何設置爲空值在Oracle SQL

到目前爲止,我有這個說法,但如果我得到空值我要處理的是:

select case when count(*)=0 
        then 0 
       else 1 
        end OUTPUT 
from TESTTBL 
where timestamp = to_char(sysdate-1, 'yyyymmdd')||'0000'; 
+0

你在哪裏想獲得空值? – zerkms

+0

那麼如果我沒有我的時間戳標準值?那麼計數將始終爲0?我只是在想,如果我沒有記錄。 – jdamae

+1

如果沒有記載,符合該條件 - 你會得到空的記錄,而不是'null' – zerkms

回答

5
SELECT CASE WHEN EXISTS 
        (SELECT * 
        FROM TESTTBL 
        WHERE timestamp = to_char(sysdate-1, 'yyyymmdd') || '0000' 
        ) 
      THEN 1 
      ELSE 0 
     END AS OUTPUT 
FROM dual      

編輯

添加了FROM dual,因爲Oracle不允許SELECT沒有FROM子句。

+0

+1爲正確答案;-) – DCookie

+1

@ypercube:+1,但我投從'SELECT *''來選擇null'並最終 – zerkms

+1

加入'FROM dual'我懷疑有任何改變性能差異。我們很可能使用'SELECT 1/0':http://stackoverflow.com/questions/1597442/subquery-using-exists-1-or-exists/1597487#1597487 –

5

你的意思是檢查null值,並設置一些默認情況下,如果是的話

select nvl(column_name,'DEFAULT') from TESTBL where timestamp = to_char(sysdate-1, 'yyyymmdd')||'0000'; 
4

在這裏你去

SELECT DECODE(count(*),0,0, 
         1) OUTPUT 
    FROM TESTTBL 
    WHERE TIMESTAMP = TO_CHAR(SYSDATE-1, 'yyyymmdd')||'0000'; 

使用解碼像

SELECT supplier_name, 
     decode(supplier_id, 10000, 'Google', 
          10001, 'Microsoft'         
          'Sony') result 
FROM suppliers; 

相當於

IF supplier_id = 10000 THEN 
    result := 'Google'; 

ELSIF supplier_id = 10001 THEN 
    result := 'Microsoft'; 

ELSE 
    result := 'Sony';  
END IF; 

,或者使用合併

SELECT coalesce(address1, address2) result 
FROM suppliers; 

這相當於

IF address1 is not null THEN 
    result := address1; 

ELSIF address2 is not null THEN 
    result := address2; 

ELSE 
    result := null; 

END IF; 
+0

+1這也適用。 – DCookie