Problema com formatação to_date

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
rhicky
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 58
Registrado em: Sex, 20 Jul 2007 9:48 am
Localização: S. J. do Rio Preto/SP
Rhicky

Pessoal,

Ao utilizar o comando to_date(sysdate, 'dd/mm/yyyy'), o sistema está trazendo o seguinte resultado: 09/02/0012. Observem que o ano não está como 2012.

O que pode ser isso ?
Isso seria alguma configuração do ORACLE ou dá para contornar via pl/sql ?
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Seu ambiente de consulta deve ta configurado diferente.

Faça :

Selecionar tudo

TO_DATE(SYSDATE,'dd/mm/rrrr')
rhicky
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 58
Registrado em: Sex, 20 Jul 2007 9:48 am
Localização: S. J. do Rio Preto/SP
Rhicky

Prezado Noctifero,

Da forma como você informou deu certo.
Mais o que significa esse "rrrr" ?

Abs,
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

O Oracle possui 2 formas de representação de anos na formatação.
Anos com 4 digitos, não faz diferença em você formatar ou não.
Mas quando possui apenas 2 digitos de ano e você vai formatar, um arredonda para cima e outro para baixo:

Selecionar tudo

TO_DATE('01/01/50','dd/mm/yy') -> 01/01/2050
TO_DATE('01/01/50','dd/mm/rr') -> 01/01/1950
No caso de ter 2 digitos de ano e tentar formatar com uma mascara de 4, acaba reproduzindo seu erro inicial:

Selecionar tudo

TO_DATE('01/01/50','dd/mm/[b]yyyy[/b]') -> 01/01/0050
TO_DATE('01/01/50','dd/mm/[b]rrrr[/b]')  -> 01/01/1950
No trabalho, aconselho a usar mais o 'R'.
PericlesAlmeida
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Ter, 01 Nov 2011 2:57 pm
"A falta de tempo é desculpa daqueles que perdem tempo por falta de método"
Albert Einstein

Não utilize TO_DATE para uma data, por exemplo:

Selecionar tudo

TO_DATE(SYSDATE,'dd/mm/yyyy')

O SYSDATE já é uma data você só deve utilizar um TO_DATE quando quiser transformar uma string para data, por exemplo:

Selecionar tudo

TO_DATE('01/01/2011','DD/MM/YYYY')
Para resolver seu problema acho que o TRUNC já serve, exemplo: TRUNC(SYSDATE), se não funcionar transforme a data em string (TO_CHAR) e depois volte para data (TO_DATE).
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

É verdade pericles.
E eu nem notei que ele fez isso quando respondi inicialmente, só vi o erro que eu já tinha tomado antes.
Quando o campo é data não é necessário usar o TO_DATE.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 14 visitantes