ORA-01861: литерал не соответствует строке формата

Когда я пытаюсь выполнить этот фрагмент:

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.

В чем проблема с этим утверждением?

6 ответов

Удалите TO_DATE в предложении WHERE

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

и измените код на

alarm_datetime

Ошибка происходит из-за преобразования to_date столбца даты.

Добавлено объяснение: Oracle преобразует ваше значение alarm_datetime в строку, используя зависимый от nls формат даты. После этого он вызывает to_date с предоставленной вами маской даты. Это бросает исключение.

Ошибка означает, что вы пытались ввести литерал со строкой формата, но длина строки формата была не такой же, как у литерала.

Один из этих форматов неверен:

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

Непосредственно перед выполнением запроса: alter session set NLS_DATE_FORMAT = "DD.MM.YYYY HH24:MI:SS"; или в каком формате вы предоставляете информацию для функции даты. Это должно исправить ошибку ORA

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 

Такое простое представление выдавало мне ошибку ORA-01861 при выполнении из Entity Framework:

      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.

Если вы используете JPA для перехода в спящий режим, убедитесь, что Entity имеет правильный тип данных для поля, определенного для столбца даты, например, используйте java.util.Date вместо String.

Другие вопросы по тегам