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,..) ?

Foi útil?

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 ....

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top