Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;ORA-01843:不是有效月份”;错误Oracle SQL_Oracle_Date - Fatal编程技术网

&引用;ORA-01843:不是有效月份”;错误Oracle SQL

&引用;ORA-01843:不是有效月份”;错误Oracle SQL,oracle,date,Oracle,Date,请帮忙。我在这里犯了一个小错误,但即使在阅读了前面的问题之后,我也无法找到它 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,

请帮忙。我在这里犯了一个小错误,但即使在阅读了前面的问题之后,我也无法找到它

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
多谢各位


此外,我对错误的数据模型感到震惊。此日期字段的值为“0--”,月份值大于12,最后是天值大于31。现在我想在选择过程中忽略这些记录。我创建的存储过程不能正常工作,如果有任何帮助,我们将不胜感激。谢谢

该错误表示表中至少有一行,
open\u date\u 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;

您也可以修改此选项以打印出行的名称并继续,这样您就可以发现是否有多行数据不正确。

我认为您需要向我们显示表数据,或者至少是其中的一个代表性示例。该表有两列,请参见下文。。。不要在评论中发布数据。更新您的问题。该表有2列,并且open_date_txt字段在数据库中存储为varchar2(10)。请参阅下面的“打开日期”AA 2010-03-24 BB 2010-07-23 CC 2015-09-20 DD 1997-03-25谢谢。顺便说一句:避免多次写出整个表达式的方便方法是:
SELECT days\u open FROM(SELECT TRUNC(SYSDATE)-to\u date(open\u date\u txt,'yyyyy-mm DD')作为从“table”打开的日期)当days\u open>90和days\u open<120
Dave时,我突然想到他可能有一些空白问题。如果是这样,那么使用
TRIM(open\u date\u txt)
可能会有帮助。可能会。但是,找到导致错误的数据不是比猜测更好吗?我同意。我会研究你的代码,以便在某个时候自己使用。@TimBiegeleisen和DaveCosta,我能够在表中找到错误的数据。非常感谢您的时间。现在您还了解了为什么将日期存储为字符串是不好的。
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;