当我尝试执行此代码段时:
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命令。
这句话有什么问题?
答案 0 :(得分:32)
删除WHERE子句中的TO_DATE
TO_DATE (alarm_datetime,'DD.MM.YYYY HH24:MI:SS')
并将代码更改为
alarm_datetime
错误来自日期列的to_date转换。
已添加说明:Oracle使用其nls依赖日期格式将alarm_datetime转换为字符串。在此之后,它使用您提供的日期掩码调用to_date。抛出异常。
答案 1 :(得分:8)
错误意味着您尝试输入带有格式字符串的文字,但格式字符串的长度与文字的长度不同。
其中一种格式不正确:
TO_CHAR(t.alarm_datetime, 'YYYY-MM-DD HH24:MI:SS')
TO_DATE(alarm_datetime, 'DD.MM.YYYY HH24:MI:SS')
答案 2 :(得分: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 的不同。
答案 3 :(得分:0)
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 :(得分:0)
在执行查询之前: alter session set NLS_DATE_FORMAT =" DD.MM.YYYY HH24:MI:SS&#34 ;; 或者您将信息提供给日期功能的格式。这应该修复ORA错误
答案 5 :(得分:0)
如果您使用 JPA 进行休眠,请确保实体具有针对日期列定义的字段的正确数据类型,例如使用 java.util.Date 而不是 String。