当前位置: 首页 > 知识库问答 >
问题:

“ORA-01843:不是一个有效的月份”错误Oracle SQL

商焕
2023-03-14

请帮忙。我在这里犯了一个小错误,但即使看了前面的问题,我也找不到它。

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:不是一个有效的月份。

Name    open_date_txt
AA      2010-03-24
BB      2010-07-23
CC      2015-09-20
DD      1997-03-25

谢谢你。

此外,我被错误的数据模型所困扰。此日期字段的值如“0--”,月份值大于12,最后天大于31。现在我想在选择期间忽略这些记录。我创建的存储过程不能正常工作,请提供帮助。谢了。

共有1个答案

薛博赡
2023-03-14

该错误表示表中至少有一行无法使用给定的格式字符串将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;

您还可以修改它以打印行的名称并继续,这样您就可以发现是否有多行包含错误数据。

 类似资料:
  • 我为PHP更改了OCI8版本,由于该查询不起作用: 我收到这个消息: 消息:oci_execute():ora-01843:不是有效月份 它与Toad一起用于Oracle11。你有什么解决办法吗? 谢谢:)

  • 我在Oracle DB中有一个列,它是数据类型。存储在此列中的典型值类似于。我试图得到所有的记录,其中该专栏有记录后2015年8月1日。 但是,我得到的是。我哪里做错了?

  • 我使用以下查询创建了一个表 现在,当我尝试使用SQL错误:ORA-01843:not a valid month。 我做错了什么?

  • 我有一个在PL-SQL视图中使用的查询。该视图包含一个名为Jde_date的函数,该函数采用Julian格式的date参数并将其转换为Gregorian格式,它工作得很好。 查询如下: 但是当我发布报告时,我得到错误ORA-01843:不是一个有效的月份。 我该怎么解决?

  • 我在上一篇文章(https://stackoverflow.com/questions/16520216/ora-01843-not-a-valide-month)中问过这个问题,但从那以后它发生了变化,我认为最好从一开始就更加明确。 我在运行从客户表中删除客户的过程时收到此错误。 现在,当我删除一个在placed_order表中没有记录的客户时,记录被删除得很好,当试图删除一个在placed_o

  • “SQL错误:ORA-01843:无效月份” 我不知道我的查询有什么问题。