Bonjour à toutes et à tous,

Je voulais partager ce bout de code SQL avec vous…

Le besoin : Au départ j'avais une colonne de type varchar2 contenant des dates de différents formats (dd/MM/yyyy, yyyy/MM/dd, dd-MON-yy, …). Et qui est alimentée par différentes sources (hétérogènes). Mais pour exploiter cette information correctement il suffit de convertir en type date quelque soit le format.

Le but : Lire d’un varchar et convertir en date.

La solution : utilisation des expressions régulières. Voici une requête exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
select to_date(macolonne, 
               case 
                 when regexp_like(macolonne, '^[0-9]{2}/[0-9]{2}/[0-9]{2}$')   then 'dd/mm/yy'
                 when regexp_like(macolonne, '^[0-9]{2}-[A-Z]{3}-[0-9][0-9]$') then 'dd-mon-yy'
                 else 'dd-mm-yy'
               end)
  from matable
Par ailleurs, si on a des dates de format MON (mois abrégé), il faut positionner la langue en anglais, pour qu’on puisse parser correctement les dates :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
ALTER SESSION set NLS_DATE_LANGUAGE= 'AMERICAN';