【问题标题】:ORA-01861: literal does not match format stringORA-01861: 文字与格式字符串不匹配
【发布时间】:2010-11-26 03:39:45
【问题描述】:

当我尝试执行这个 sn-p:

cmd.CommandText = "SELECT alarm_id,definition_description,element_id,
    TO_CHAR (alarm_datetime, 'YYYY-MM-DD HH24:MI:SS'),severity,
    problem_text,status FROM aircom.alarms 
    WHERE status = 1 and 
    TO_DATE (alarm_datetime,'DD.MM.YYYY HH24:MI:SS') > TO_DATE ('07.09.2008 
    09:43:00', 'DD.MM.YYYY HH24:MI:SS') 
    order 
    by ALARM_DATETIME desc";

我明白了:

ORA-01861: literal does not match format string

数据库连接没有问题,因为我可以执行基本的SQL命令。

这句话有什么问题?

【问题讨论】:

  • 尝试使用 SQL Plus 运行此语句,看看它对此有何评论。如果 SQLPlus 可以执行,ado.net 应该没有问题。

标签: sql oracle oracle10g ora-01861


【解决方案1】:

去掉 WHERE 子句中的 TO_DATE

TO_DATE (alarm_datetime,'DD.MM.YYYY HH24:MI:SS')

并将代码更改为

alarm_datetime

错误来自日期列的 to_date 转换。

添加说明:Oracle 使用其依赖于 nls 的日期格式将您的 alarm_datetime 转换为字符串。在此之后,它会使用您提供的日期掩码调用 to_date。这会引发异常。

【讨论】:

    【解决方案2】:

    该错误表示您尝试输入带有格式字符串的文字,但格式字符串的长度与文字的长度不同。

    其中一种格式不正确:

    TO_CHAR(t.alarm_datetime, 'YYYY-MM-DD HH24:MI:SS')
    TO_DATE(alarm_datetime, 'DD.MM.YYYY HH24:MI:SS')
    

    【讨论】:

    • 你举个例子说一半不正确的答案有什么用?
    【解决方案3】:
    SELECT alarm_id
    ,definition_description
    ,element_id
    ,TO_CHAR (alarm_datetime, 'YYYY-MM-DD HH24:MI:SS')
    ,severity
    , problem_text
    ,status 
    FROM aircom.alarms 
    WHERE status = 1 
        AND TO_char (alarm_datetime,'DD.MM.YYYY HH24:MI:SS') > TO_DATE ('07.09.2008  09:43:00', 'DD.MM.YYYY HH24:MI:SS') 
    ORDER BY ALARM_DATETIME DESC 
    

    【讨论】:

      【解决方案4】:

      就在执行查询之前: 更改会话集 NLS_DATE_FORMAT = "DD.MM.YYYY HH24:MI:SS"; 或您将信息提供给日期函数的任何格式。这应该可以修复 ORA 错误

      【讨论】:

      • 代码不应该依赖于 NLS_DATE_FORMAT。该参数对于配置如何显示数据很有用,但不应用于处理。
      【解决方案5】:

      当从实体框架执行时,像这样的简单视图给了我 ORA-01861 错误:

      create view myview as 
      select * from x where x.initialDate >= '01FEB2021'
      

      刚刚做了这样的事情来修复它:

      create view myview as 
      select * from x where x.initialDate >= TO_DATE('2021-02-01', 'YYYY-MM-DD')
      

      我认为问题在于 EF 日期配置与 Oracle 的不一样。

      【讨论】:

        【解决方案6】:

        如果您使用 JPA 休眠,请确保实体具有针对日期列定义的字段的正确数据类型,例如使用 java.util.Date 而不是 String。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-24
          • 2015-01-11
          • 2012-10-09
          • 2014-04-27
          • 2014-11-30
          相关资源
          最近更新 更多