La conversione ad oggi con più possibili maschere in Oracle
Domanda
E 'il caso che devo ottenere una data da una colonna VARCHAR2 in Oracle, ma è incoerente nella formattazione. Alcuni campi potrebbero avere '2009/12/31', altri '2009/12/32 00:00:00'. Esiste un costrutto di serie potrei usare, in modo che non devo passare attraverso
begin
to_date(date, mask1)
exception
begin
to_date(date,mask2)
exception
..
end
end
blocchi o prima analisi data stringa per determinare la maschera corretta? Qualcosa di simile to_date(date, mask1,mask2,..)
?
Soluzione
No, ma alcuni formati di data Oracle sono "perdonare" delle differenze per esempio.
SQL> select to_date('2009.12.31','YYYY/MM/DD') from dual;
TO_DATE('20
-----------
31-DEC-2009
In modo che può ridurre la quantità di casi che è necessario gestire. Vi suggerisco di scrivere una funzione lungo le linee stavi pensando di, in modo che possa essere chiamato da tutti i luoghi nel codice in cui è necessario gestire le date in questo modo.
Altri suggerimenti
È necessario enumerare tutti i possibili formati che si desidera supportare - ricordare che alcuni sono ambigui (ad esempio, è "10-11-2009" 10 nov o 11 ottobre?) In modo che il codice dovrà favorire uno sopra l'altro.
Come ha detto Tony, alcuni formati accetteranno una varietà di ingressi, soprattutto per quanto riguarda l'analisi dei caratteri separatori e pezzi mancanti (ad esempio 'DD-MON-YYYY HH24: MI: SS' corrisponderà '31 -DEC del 2009 10:30:00' , la data del 31 / dic / 2009 10:30' , la data del 31 dicembre 2009' ).
Oltre a queste semplificazioni, si sta andando ad avere bisogno di una serie di BEGIN (Format1) ECCEZIONE QUANDO ALTRI poi iniziare (FORMAT2) ECCEZIONE QUANDO ALTRI poi iniziare ....