2013-07-24 58 views
0

我有一個函數,它接受2個日期參數:甲骨文 - 文字不匹配格式字符串

CREATE OR REPLACE FUNCTION date_equal 
(
    date1 IN DATE, 
    date2 IN DATE 
) 
RETURN NUMBER IS 
    equal BOOLEAN; 
BEGIN 
    equal := NVL(date1, '1999-01-01') = NVL(date2, '1999-01-01'); 
    IF equal THEN 
     RETURN 1; 
    ELSE 
     RETURN 0; 
    END IF; 
END date_equal; 
/

現在,當我在這爲功能提供數據的表運行select它運行好:

SELECT TO_DATE(some_date, 'YYYY-MM-DD') FROM tbl 

但是當我嘗試使用該函數調用失敗:

SELECT date_equal(TO_DATE(some_date, 'YYYY-MM-DD'), TO_DATE(some_date, 'YYYY-MM-DD')) FROM tbl 

的錯誤消息是「做字面es不匹配格式字符串「。有誰知道爲什麼會發生?

回答

4

當你

NVL(date1, '1999-01-01') 

Oracle嘗試將 '1999-01-01' 轉換爲日期隱式(因爲DATE1是一個日期)。
這樣做的,它使用NLS_DATE_FORMAT這可能不是yyyy-mm-dd

您可以使用顯式轉換:

NVL(date1, to_date('1999-01-01', 'yyyy-mm-dd')) 

或使用ANSI方式

NVL(date1, date '1999-01-01') 
2

錯誤消息肯定是造成pieace閱讀NVL(date1, '1999-01-01')

改爲嘗試nvl(date1, date '1999-01-01')