Konvertieren mit mehreren möglichen Masken in Oracle
Frage
Es kommt so vor, dass ich ein Datum aus einer Varchar2 -Spalte in Oracle erhalten muss, aber es ist inkonsistent in Formatierung. Einige Felder haben möglicherweise "2009.12.31", andere "2009/12/32 00:00:00". Gibt es ein Standardkonstrukt, das ich verwenden könnte, damit ich nicht durchgehen muss
begin
to_date(date, mask1)
exception
begin
to_date(date,mask2)
exception
..
end
end
Blöcke oder Vor -Datum -Zeichenfolge -Analyse zur Bestimmung der richtigen Maske? Etwas wie to_date(date, mask1,mask2,..)
?
Lösung
Nein, aber einige Orakel -Datumsformate "vergeben" von Unterschieden, z.
SQL> select to_date('2009.12.31','YYYY/MM/DD') from dual;
TO_DATE('20
-----------
31-DEC-2009
Dadurch kann die Anzahl der Fälle verringert werden, die Sie tun müssen. Ich schlage vor, Sie schreiben eine Funktion nach den von Ihnen nachgedachten Zeilen, damit sie von allen Orten in Ihrem Code angerufen werden kann, an denen Sie solche Daten verarbeiten müssen.
Andere Tipps
Sie müssen alle möglichen Formate, die Sie unterstützen möchten, aufzählen-denken Sie daran, dass einige mehrdeutig sind (z. B. "10-11-2009" 10. November oder 11. Oktober?), So dass Ihr Code einen gegenüber dem anderen bevorzugen muss.
Wie Tony sagte, akzeptieren einige Formate eine Vielzahl von Eingaben : 00 ', '31/dez/2009 10:30', '31 Dezember 2009 ').
Abgesehen von diesen Vereinfachungen benötigen Sie eine Reihe von Ausnahme (Format1) (Format1), wenn andere dann beginnen (Format2) Ausnahme, wenn andere dann beginnen ....