2013-07-24 46 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')