Question

Il se trouve que je dois obtenir une date d'une colonne de varchar2 dans l'oracle, mais il est incohérent dans la mise en forme. Certains champs pourraient avoir « 2009.12.31 », d'autres «2009/12/32 00:00:00. Y at-il construit standard que je pourrais utiliser, de sorte que je ne dois pas passer par

begin
  to_date(date, mask1)
exception
  begin
    to_date(date,mask2)
  exception
    ..
  end
end

blocs ou l'analyse de la chaîne de date antérieure pour déterminer le masque correct? Quelque chose comme to_date(date, mask1,mask2,..)?

Était-ce utile?

La solution

Non, mais certains formats de date Oracle sont "pardonner" des différences par exemple.

SQL> select to_date('2009.12.31','YYYY/MM/DD') from dual;

TO_DATE('20
-----------
31-DEC-2009

qui peut réduire le nombre de cas dont vous avez besoin pour gérer. Je vous suggère d'écrire une fonction le long des lignes que vous pensez de, de sorte que l'on peut appeler de tous les endroits dans votre code où vous avez besoin pour gérer les dates comme celui-ci.

Autres conseils

Vous devez énumérer tous les formats possibles que vous souhaitez prendre en charge - rappelez-vous que certains sont ambigus (par exemple, est « 10-11-2009 » 10 nov ou 11 octobre) donc votre code devra favoriser un sur l'autre.

Comme Tony a dit, certains formats acceptent une variété d'entrées, principalement en ce qui concerne l'analyse des caractères de séparation et les bits manquants (par exemple, 'DD-MON-YYYY HH24: MI: SS' correspondra '31 -DEC-2009 10:30:00' , '31 / dec / 2009 10h30' , '31 décembre 2009).

En dehors de ces simplifications, vous allez avoir besoin d'une série de BEGIN (format1) QUAND LES AUTRES EXCEPTION then begin (format2) QUAND LES AUTRES EXCEPTION .... ALORS BEGIN

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top