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

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

4

2 回答 2

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')
于 2013-07-24T16:04:16.320 回答
2

错误消息肯定是由阅读引起的NVL(date1, '1999-01-01')

试试nvl(date1, date '1999-01-01')吧。

于 2013-07-24T16:05:04.567 回答