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.
В чем проблема с этим утверждением?
Ответы
Ответ 1
Удалить TO_DATE в предложении WHERE
TO_DATE (alarm_datetime,'DD.MM.YYYY HH24:MI:SS')
и измените код на
alarm_datetime
Ошибка возникает из преобразования to_date столбца даты.
Добавлено Explanation: Oracle преобразует ваше alarm_datetime в строку с использованием формата даты, зависящего от nls. После этого он вызывает 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