Pergunta

Exemplo:

select ename from emp where hiredate = todate('01/05/81','dd/mm/yy')

e

select ename from emp where hiredate = todate('01/05/81','dd/mm/rr')

retornar resultados diferentes

Foi útil?

Solução

http://oracle.ittoolbox.com/groups/technical-funcional/oracle-dev-l/difference-between-yyyy-and-rrrr-format-519525

YY permite que você recupere apenas dois dígitos de um ano, por exemplo, o 99 em 1999.Os outros dígitos (19) são atribuídos automaticamente ao século atual.RR converte anos de dois dígitos em anos de quatro dígitos por arredondamento.

50-99 são armazenados em 1950-1999, e as datas que terminam em 00-49 são armazenadas como 2000-2049.O RRRR aceita uma entrada de quatro dígitos (embora não seja necessária) e converte datas de dois dígitos como o RR.AAAA aceita entradas de 4 dígitos, mas não fazem nenhuma data de conversão

Essencialmente, o seu primeiro exemplo assumirá que 81 é 2081, enquanto o RR assume 1981.Portanto, o primeiro exemplo não deve retornar nenhuma linha, pois você provavelmente ainda não contratou ninguém depois de 1º de maio de 2081 :-)

Outras dicas

@Michael Stum

Minha última experiência com Oracle foi há muito tempo

uhm, foi antes de 2000?:p

...

Você sempre assumirá 19xx?

de acordo com sua fonte, obtemos os seguintes cenários:

USING
ENTERED
STORED
SELECT of date column


YY
22-FEB-01
22-FEB-1901
22-FEB-01


YYYY
22-FEB-01
22-FEB-0001
22-FEB-0001


RR
22-FEB-01
22-FEB-2001
22-FEB-01


RRRR
22-FEB-01
22-FEB-2001
22-FEB-2001 

/mp

Compatibilidade com o ano 2000.rr assume que 01 é 2001, yy assume que 01 é 1901

ver: http://www.oradev.com/oracle_date_format.jsp

editar:droga! coto de Michael "dedos rápidos" me vença!

/mp

RR exibe quatro dígitos como 1999 ou 2015 (se for <49 então considerará o século 20)

Sobre RR ou RRRR

Quando inserimos as datas com anos de 2 dígitos (ou seja,09/OUT/15) Então o Oracle pode alterar os séculos automaticamente, portanto, a solução é de 4 datas de dígitos.Mas a versão de 4 dígitos é introduzida em algumas versões recentes; portanto, as soluções para esse problema nas versões anteriores foram RR ou RRRR.Mas observe que ele só funciona com o TO_DATE() função, mas não com o TO_CHAR() função.

Sempre que forem realizadas inserções/atualizações em datas, devemos sempre esclarecer a data atual no relógio em associação com a tradução da data, uma vez que a Oracle conduz cada tradução de data entrando em contato com o servidor.

Para manter as consistências entre os séculos, é sempre melhor realizar a tradução da data com anos de 4 dígitos.

Sobre AA ou AAAA

Aceita as datas, mas não possui funcionalidade para alterá-las automaticamente.

Esta imagem mostra o comportamento ao inserir data com dois dígitos (ou seja,09/out/15)

RR significa depois de 1990 e yy assume 90 como 2090....como estamos no ano atual,...

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