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.

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


person Community    schedule 07.09.2009    source источник
comment
Попробуйте запустить этот оператор с помощью SQL Plus, чтобы узнать, что он говорит по этому поводу. Если SQLPlus может его выполнить, у ado.net не должно быть никаких проблем.   -  person shahkalpeshp    schedule 07.09.2009


Ответы (5)


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

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

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

alarm_datetime

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

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

person Christian13467    schedule 07.09.2009

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

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

TO_CHAR(t.alarm_datetime, 'YYYY-MM-DD HH24:MI:SS')
TO_DATE(alarm_datetime, 'DD.MM.YYYY HH24:MI:SS')
person OMG Ponies    schedule 07.09.2009
comment
Какая польза от ответа, когда вы приводите пример и говорите, что половина его неверна? - person PunchyRascal; 02.01.2017

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

person Vijay    schedule 09.09.2016
comment
Код никогда не должен зависеть от NLS_DATE_FORMAT. Этот параметр полезен для настройки отображения данных, но не должен использоваться для обработки. - person Jon Heller; 10.09.2016

Такое простое представление вызывало ошибку 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.

person vaati    schedule 27.02.2021

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

person Pratap Kumar Panda    schedule 23.12.2020