【发布时间】:2015-12-07 20:23:50
【问题描述】:
我需要找出两个日期之间的天数。
代码如下:
declare
datum DATE;
sdate DATE;
shpord NUMBER;
rozdiel NUMBER;
MESSAGE VARCHAR(2000) := 'Nemozete Uvolnit VO c.';
begin
datum := TO_DATE('&OLD:NEED_DATE','DD.MM.YYYY');
sdate := TO_DATE(sysdate,'DD.MM.YYYY');
rozdiel := datum - sdate;
IF rozdiel > 5 THEN
ERROR_SYS.Record_General('Nemozete Uvolnit VO c','');
END IF;
end;
我收到一个错误:
ORA-01858:在需要数字的地方发现了一个非数字字符
【问题讨论】:
-
@Consider 在未来,也请编辑出谢谢和其他类似的噪音。这将使您建议的修改更加完整。
-
不要:
sdate := TO_DATE(sysdate,'DD.MM.YYYY');。sysdate已经是一个日期。您的代码采用sysdate并隐式将其转换为字符串,因为to_date采用字符串。用于隐式转换的格式基于NLS_DATE_FORMAT。然后to_date将该字符串转换回日期。如果 NLS_DATE_FORMAT` 与您指定的返回日期的字符串不匹配,则往返字符串和返回将给出错误或不正确的结果。 -
在
date值上调用to_date()以将其转换为date是完全错误的。