Oracle - literal与格式字符串不匹配

时间:2013-07-24 15:58:26

标签: sql oracle

我有一个带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

错误消息是“文字与格式字符串不匹配”。有谁知道为什么会这样?

2 个答案:

答案 0 :(得分: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')

答案 1 :(得分:2)

错误消息肯定是由于读取NVL(date1, '1999-01-01')。{/ p>

请尝试nvl(date1, date '1999-01-01')