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,..)?

È stato utile?

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 ....

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top