2010-10-04 23 views
3
SELECT DECODE (SYSDATE, SYSDATE + 1, NULL, SYSDATE) 
    FROM DUAL; 


SELECT DECODE (SYSDATE, SYSDATE + 1, TO_DATE (NULL), SYSDATE) 
    FROM DUAL; 

爲什麼我以上述查詢以不同格式獲得結果?Oracle以不同格式解碼函數結果

我使用Oracle數據庫10g企業版發佈10.2.0.4.0 - 64bi

+0

你能澄清你的意思是「不同的格式」?究竟是什麼,你看到這兩個查詢返回? – 2010-10-04 07:47:18

+0

問題是空值。那是什麼數據類型?第二個查詢將返回一個日期。對於第一個查詢,它是varchar2(8)。 – Rene 2010-10-04 07:51:04

+0

對不起賈斯丁,第一個查詢修剪sysdate的返回值,第二個返回它的小時,分​​鍾等值。但我認爲雷內已經解決了我的問題:) – mutoss 2010-10-04 08:10:46

回答

5

decode函數結果有第三個參數的數據類型。在第一種情況下,由於沒有爲NULL指定數據類型,所以使用默認的VARCHAR2。在第二種情況下,明確要求DATE,因此結果是日期。

換句話說,第一個查詢是一樣的:

SELECT DECODE(SYSDATE, SYSDATE + 1, to_char(NULL), to_char(SYSDATE)) FROM DUAL; 

此查詢的輸出將被格式化,按您的NLS_DATE_FORMAT會話參數,而第二個查詢將返回將被顯示的日期根據你的客戶端設置。