首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"ORA-01843:无效月份“错误

"ORA-01843:无效月份“错误
EN

Stack Overflow用户
提问于 2016-11-18 02:08:58
回答 1查看 1.6K关注 0票数 1

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

代码语言:javascript
复制
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)存储在数据库中。请见下文

代码语言:javascript
复制
Name    open_date_txt
AA      2010-03-24
BB      2010-07-23
CC      2015-09-20
DD      1997-03-25

谢谢。

而且,我对不正确的数据模型感到震惊。此日期字段的值为‘0-’,月份值大于12,最后日期大于31。现在,我想忽略这些记录在我的选择。我创建的存储过程不能正常工作,任何帮助都将不胜感激。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-18 02:36:28

此错误意味着表中至少有一行不能使用给定的格式字符串将open_date_txt中的值转换为DATE

查询将一直运行,直到到达该行,然后抛出错误。当然,您从未看到导致输出错误的行,因此很难找到导致问题的值。

一种技术是逐行遍历并引发一个更有用的异常,该异常标识导致错误的条目。例如:

代码语言:javascript
复制
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;

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40668274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档