2009-09-07 13 views
22

übereinstimmen Wenn ich versuche, diese Schnipsel auszuführen:ORA-01861: wörtliche nicht Formatstring

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:

ORA-01861: literal does not match format string 

Es gibt kein Problem mit Datenbankanbindung, weil ich Grund ausführen kann SQL-Befehle

Was ist das Problem mit dieser Aussage?

+0

Versuchen Sie diese Anweisung mit SQL Plus auszuführen, um zu sehen, was es dazu zu sagen hat. Wenn SQLPlus es ausführen kann, sollte ado.net kein Problem haben. – shahkalpesh

Antwort

25

die TO_DATE in der WHERE-Klausel entfernen

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

und den Code ändern zu

alarm_datetime 

Der Fehler kommt aus to_date Umwandlung einer Datumsspalte.

Hinzugefügt Erläuterung: Oracle konvertiert Ihre alarm_datetime in eine Zeichenkette mit dem von NSL abhängigen Datumsformat. Danach ruft sie to_date mit der von Ihnen angegebenen Datumsmaske auf. Dies löst die Ausnahme aus.

7

Der Fehler bedeutet, dass Sie versucht haben, ein Literal mit einer Formatzeichenfolge einzugeben, aber die Länge der Formatzeichenfolge nicht die gleiche Länge wie das Literal hatte.

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') 
+1

Was nützt eine Antwort, wo Sie ein Beispiel aufstellen und sagen, dass die Hälfte davon falsch ist? – PunchyRascal

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 
0

Kurz vor dem Ausführen der Abfrage: alter Sitzung Satz NLS_DATE_FORMAT = "DD.MM.YYYY HH24: MI: SS"; oder welches Format Sie auch immer der Datumsfunktion geben. Dies sollte den ORA-Fehler beheben

+0

Code sollte nie von einem NLS_DATE_FORMAT abhängen. Dieser Parameter ist nützlich zum Konfigurieren der Anzeige von Daten, sollte jedoch nicht zur Verarbeitung verwendet werden. –