Convertendo até data com várias máscaras possíveis no Oracle
Pergunta
Acontece que eu tenho que obter uma data de uma coluna VARCHAR2 no Oracle, mas é inconsistente na formatação. Alguns campos podem ter '2009.12.31', outros '2009/12/32 00:00:00'. Existe algum construto padrão que eu possa usar, para que não precise passar
begin
to_date(date, mask1)
exception
begin
to_date(date,mask2)
exception
..
end
end
Blocos ou análise de string de data anterior para determinar a máscara correta? Algo como to_date(date, mask1,mask2,..)
?
Solução
Não, mas alguns formatos de data do Oracle são "perdoador" de diferenças, por exemplo,
SQL> select to_date('2009.12.31','YYYY/MM/DD') from dual;
TO_DATE('20
-----------
31-DEC-2009
Para que isso possa reduzir a quantidade de casos que você precisa lidar. Eu sugiro que você escreva uma função de acordo com as linhas em que estava pensando, para que ela possa ser chamada de todos os lugares do seu código, onde você precisa lidar com datas como essa.
Outras dicas
Você precisa enumerar todos os formatos possíveis que deseja apoiar-lembre-se de que alguns são ambíguos (por exemplo, é "10-11-2009" 10 de novembro ou 11 de outubro?) Então seu código terá que favorecer um sobre o outro.
Como Tony disse, alguns formatos aceitarão uma variedade de insumos, principalmente no que diz respeito à análise de caracteres separadores e bits ausentes (por exemplo, DD-Mon-Yyyy Hh24: Mi: SS 'corresponderá '31 -DEC-2009 10:30 : 00 ', '31/dez/2009 10:30', '31 de dezembro de 2009 ').
Além dessas simplificações, você precisará de uma série de exceção de início (formato1) quando outros começarem (formato2) exceção quando outros começarem ....