2009-12-18 16 views
3

Il se trouve que je dois obtenir une date à partir d'une colonne varchar2 dans Oracle, mais il est incohérent dans le formatage. Certains champs peuvent 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 parConversion à ce jour avec plusieurs masques possibles dans Oracle

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

blocs ou analyse de chaîne de date avant de déterminer le masque correct? Quelque chose comme to_date(date, mask1,mask2,..)?

+0

sons comme il n'y a aucune restriction sur ce est entré dans ce champ Varchar2. Comment gérez-vous la situation où ce qui est entré n'est pas du tout une chaîne de date valide? –

Répondre

4

Non, mais certains formats de date Oracle "pardonnent" les différences, par ex.

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

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

Cela peut réduire la quantité de cas que vous devez gérer. Je vous suggère d'écrire une fonction le long des lignes que vous pensiez, de sorte qu'il peut être appelé à partir de tous les endroits dans votre code où vous devez gérer des dates comme celle-ci.

1

Vous devez énumérer tous les formats possibles que vous voulez prendre en charge - rappelez-vous que certains sont ambigus (par exemple, "10-11-2009" 10 nov ou 11 oct?), Donc votre code devra privilégier l'un par rapport à l'autre . Comme Tony l'a dit, certains formats accepteront une variété d'entrées, principalement en ce qui concerne l'analyse des caractères séparateurs et des bits manquants (par exemple, 'DD-MON-YYYY HH24: MI: SS' correspondra à '31 -DEC- 2009 10:30:00 ', '31/deC/2009 10:30', '31 dec 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