我有在我傳遞SYSDATE到查詢問題SQL查詢的是,當不存在與SYSDATE表中沒有匹配日期,那麼它不顯示爲零,即使有NVL應用 這裏是我的查詢如何顯示0時,沒有發現排
select * from molasses
where trunc(trn_dte) = trunc(sysdate)
但它顯示的數據,只有噹噹前的日期出現在表中,但我想顯示零,如果沒有在table.please發現數據幫我做這件事的是Oracle 10克因爲有些時候這種狀況就像上面我也顯示爲零時找不到數據
我有在我傳遞SYSDATE到查詢問題SQL查詢的是,當不存在與SYSDATE表中沒有匹配日期,那麼它不顯示爲零,即使有NVL應用 這裏是我的查詢如何顯示0時,沒有發現排
select * from molasses
where trunc(trn_dte) = trunc(sysdate)
但它顯示的數據,只有噹噹前的日期出現在表中,但我想顯示零,如果沒有在table.please發現數據幫我做這件事的是Oracle 10克因爲有些時候這種狀況就像上面我也顯示爲零時找不到數據
這是奇怪的,我不會使用它,它更像是一個黑客:
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()
函數也可以很容易地解決這個問題。
是它的工作原理由於 – user1819920
像這樣的事情將工作,但我不認爲這是一個很好的主意:
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
假設你的表有四數值列,你可以寫:
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
這是一個非常不尋常的問題。爲什麼查詢在沒有數據的情況下返回0?通常,這取決於客戶端軟件/報告生成器在沒有數據存在時顯示有意義的內容,而不是查詢本身。
鑑於上述答案請 – user1819920
@ user1685991 - 你有多重經驗的開發人員告訴你這是一個壞主意 - 不是不可能做的事情,但一個壞主意。警告程序... –
例如,如果我正在尋找一個月的報告,然後失蹤的任何日期混淆了我,所以我想顯示所有的日子,如果沒有任何行的那一天,那麼零對我而言,而不是錯過了一天在月份報告中。 – rahularyansharma
你想要在所有列的'0'?某些列將具有其他(不是數字)數據類型。 –
難道你只是檢查你的應用程序,0行是返回? –
我把所有數值列 – user1819920