39

当我尝试执行此代码段时:

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 命令。

这个说法有什么问题?

4

6 回答 6

39

删除 WHERE 子句中的 TO_DATE

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

并将代码更改为

alarm_datetime

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

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

于 2009-09-07T07:09:40.403 回答
9

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

其中一种格式不正确:

TO_CHAR(t.alarm_datetime, 'YYYY-MM-DD HH24:MI:SS')
TO_DATE(alarm_datetime, 'DD.MM.YYYY HH24:MI:SS')
于 2009-09-07T07:11:41.843 回答
1
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 
于 2012-06-04T06:48:32.277 回答
1

当从实体框架执行时,像这样的简单视图给了我 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 的不同。

于 2021-02-27T02:15:13.013 回答
1

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

于 2016-09-09T21:25:30.910 回答
0

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

于 2020-12-23T11:21:05.333 回答