【发布时间】:2013-08-22 09:49:43
【问题描述】:
我们一直在研究一些遗留代码,并找到了检查 date(VARCHAR2) 是否以正确的格式“YYYY-MM-DD HH24:MI:SS”传递的函数。它使用简单的构造
function IS_CORRECT_TIMESTAMP(P_EVENT_TIMESTAMP varchar2)
return number is
V_TIMESTAMP timestamp;
begin
select TO_TIMESTAMP(NVL(P_EVENT_TIMESTAMP, '1'),
'YYYY-MM-DD HH24:MI:SS')
into V_TIMESTAMP
from DUAL;
return 1;
exception
when others then
return - 1;
end;
问题是,当我传递例如“22-AUG-13”的值时,它不会引发任何异常。 这可能是什么原因?
感谢您的想法。
【问题讨论】:
-
Oracle 尝试(有时过于努力)提供帮助,converts strings to dates with some flexibility。你已经被告知使用
FX修饰符来防止这种情况。仅供参考,您的模型22-AUG-13变为0022-08-13 00:00:00,这仍然有效;如果您使用RRRR而不是YYYY,那将是2022-08-13 00:00:00,这也是有效的。有些日期仍然会失败,例如22-AUG-99.