请帮帮忙。我在这里犯了一个小小的错误,但即使在阅读了前面的问题之后也找不到它。
SELECT TRUNC (SYSDATE) - TO_DATE (open_date_txt, 'yyyy-mm-dd') AS Days_open
FROM 'table'
WHERE TRUNC (SYSDATE) - TO_DATE (open_date_txt, 'yyyy-mm-dd') > 90 AND
TRUNC (SYSDATE) - TO_DATE (open_date_txt, 'yyyy-mm-dd') < 120查询运行时没有出错,但是当我从结果中选择所有数据(通过执行ctrl+A)时,我得到ORA-1843:无效的月份。
NLS_DATE_FORMAT是DD-MON NLS_DATE_LANGUAGE是美国的
该表有2列,open_date_txt字段作为varchar2(10)存储在数据库中。请见下文
Name open_date_txt
AA 2010-03-24
BB 2010-07-23
CC 2015-09-20
DD 1997-03-25谢谢。
而且,我对不正确的数据模型感到震惊。此日期字段的值为‘0-’,月份值大于12,最后日期大于31。现在,我想忽略这些记录在我的选择。我创建的存储过程不能正常工作,任何帮助都将不胜感激。谢谢。
发布于 2016-11-18 02:36:28
此错误意味着表中至少有一行不能使用给定的格式字符串将open_date_txt中的值转换为DATE。
查询将一直运行,直到到达该行,然后抛出错误。当然,您从未看到导致输出错误的行,因此很难找到导致问题的值。
一种技术是逐行遍历并引发一个更有用的异常,该异常标识导致错误的条目。例如:
DECLARE
d DATE;
BEGIN
FOR x IN (SELECT name, open_date_txt FROM table) LOOP
BEGIN
d := TO_DATE( x.open_date_txt, 'yyyy-mm-dd');
EXCEPTION
WHEN others THEN
raise_application_error(-20000, 'Error on name: ' || x.name, TRUE );
END;
END LOOP;
END;您还可以修改它,以打印出该行的名称并继续,这样您就会发现是否有多个包含错误数据的行。
https://stackoverflow.com/questions/40668274
复制相似问题