Wenn ich versuche, dieses Snippet auszuführen:
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";
Ich bekomme:
ORA-01861: literal does not match format string
Es gibt kein Problem mit der Datenbankverbindung, da ich grundlegende SQL-Befehle ausführen kann.
Was ist das Problem mit dieser Aussage?
Entfernen Sie das TO_DATE in der WHERE-Klausel
TO_DATE (alarm_datetime,'DD.MM.YYYY HH24:MI:SS')
und ändern Sie den Code in
alarm_datetime
Der Fehler rührt von der Konvertierung einer Datumsspalte zu Datum her.
Erklärung hinzugefügt: Oracle konvertiert Ihre alarm_datetime in eine Zeichenfolge unter Verwendung des von nls abhängigen Datumsformats. Danach ruft es to_date mit Ihrer angegebenen Datumsmaske auf. Dies löst die Ausnahme aus.
Der Fehler bedeutet, dass Sie versucht haben, ein Literal mit einer Formatzeichenfolge einzugeben, die Länge der Formatzeichenfolge jedoch nicht mit der Länge des Literal übereinstimmt.
Eines dieser Formate ist falsch:
TO_CHAR(t.alarm_datetime, 'YYYY-MM-DD HH24:MI:SS')
TO_DATE(alarm_datetime, 'DD.MM.YYYY HH24:MI:SS')
Kurz vor dem Ausführen der Abfrage: alter session set NLS_DATE_FORMAT = "TT.MM.JJJJ HH24: MI: SS"; oder welches Format Sie der Datumsfunktion geben. Dies sollte den ORA-Fehler beheben
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