venerdì 6 febbraio 2009

costruire una data in oracle

Condivido una riga di sql che ho scritto oggi. L'esigenza è quella di formattare un campo data a partire da una stringa varchar da 255 caratteri massimo. Il problema era che all'interno del campo i valori presenti avevano diverse formattazioni:
D/M/YYYY HH:MI:SS
DD/MM/YYYY HH:MI:SS

e tutte le varie combinazioni che si possono presentare, per quanto riguarda i cambi relativi al giorno e al mese. Pertanto ho scritto l'istruzione che segue:

to_date(
lpad((substr(t.campo4,1,(instr(t.campo4,'/',1,1)-1))),2,'0')||'/'||
lpad((substr(t.campo4,((instr(t.campo4,'/',1,1))+1), ((instr(t.campo4,'/',1,2)) - (instr(t.campo4,'/',1,1)) -1))),2,'0')||'/'||
substr(t.campo4,((instr(t.campo4,'/',1,2))+1),4),'DD/MM/YYYY')

che costruisce una data a partire dal contenuto del "campo4".