2012-09-24 33 views
0

我有在我傳遞SYSDATE到查詢問題SQL查詢的是,當不存在與SYSDATE表中沒有匹配日期,那麼它不顯示爲零,即使有NVL應用 這裏是我的查詢如何顯示0時,沒有發現排

select * from molasses 
where trunc(trn_dte) = trunc(sysdate) 

但它顯示的數據,只有噹噹前的日期出現在表中,但我想顯示零,如果沒有在table.please發現數據幫我做這件事的是Oracle 10克因爲有些時候這種狀況就像上面我也顯示爲零時找不到數據

+2

你想要在所有列的'0'?某些列將具有其他(不是數字)數據類型。 –

+1

難道你只是檢查你的應用程序,0行是返回? –

+0

我把所有數值列 – user1819920

回答

1

這是奇怪的,我不會使用它,它更像是一個黑客:

SELECT col1, col2, ..., colN    --- numeric columns 
FROM molasses 
WHERE trunc(trn_dte) = trunc(sysdate) 

UNION ALL 

SELECT 0, 0, ..., 0 
FROM dual 
WHERE NOT EXISTS 
     (SELECT * 
     FROM molasses 
     WHERE trunc(trn_dte) = trunc(sysdate) 
    ) ; 

人們只能懷疑的應用/用戶將有確切時間在表中的一行,所有的值都爲零明白。


,我認爲這會工作,太:

SELECT m.col1, m.col2, ..., m.colN    --- numeric columns 
FROM dual LEFT JOIN molasses m 
    ON trunc(m.trn_dte) = trunc(sysdate) ; 

,並顯示空值,而不是(通緝)0。使用COALESCE()函數也可以很容易地解決這個問題。

+0

是它的工作原理由於 – user1819920

1

像這樣的事情工作,但我不認爲這是一個很好的主意:

select nvl(t.a, n.a) as a, nvl(t.b, n.b) as b, ... 
from molasses t 
right outer join (select 0 as a, 0 as b, ... from dual) n on 1 = 1 
0

假設你的表有四數值列,你可以寫:

select * from molasses 
where trunc(trn_dte) = trunc(sysdate) 
union all 
select 0, 0, 0, 0 from dual 
where (select count(*) from molasses where trunc(trn_dte) = trunc(sysdate)) = 0 
1

這是一個非常不尋常的問題。爲什麼查詢在沒有數據的情況下返回0?通常,這取決於客戶端軟件/報告生成器在沒有數據存在時顯示有意義的內容,而不是查詢本身。

+0

鑑於上述答案請 – user1819920

+1

@ user1685991 - 你有多重經驗的開發人員告訴你這是一個壞主意 - 不是不可能做的事情,但一個壞主意。警告程序... –

+0

例如,如果我正在尋找一個月的報告,然後失蹤的任何日期混淆了我,所以我想顯示所有的日子,如果沒有任何行的那一天,那麼零對我而言,而不是錯過了一天在月份報告中。 – rahularyansharma