我有一个带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
错误消息是“文字与格式字符串不匹配”。有谁知道为什么会这样?
答案 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')
。