Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

RR vs YY no Oracle


Ao formatar datas no Oracle Database, temos a opção de usar RR e YY para retornar um ano de dois dígitos.

Esses dois elementos de formato são semelhantes. A diferença está em como eles interpretam anos de dois dígitos.

Também temos a opção de usar RRRR e YYYY ao retornar anos de quatro dígitos.

Exemplo


Aqui está um exemplo que compara o RR e YY elementos de formato:
SELECT 
    TO_CHAR(TO_DATE('20-Dec-81', 'DD-Mon-RR'), 'YYYY') AS "RR",
    TO_CHAR(TO_DATE('20-Dec-81', 'DD-Mon-YY'), 'YYYY') AS "YY"
FROM DUAL;

Resultado:
     RR      YY 
_______ _______ 
1981    2081   

Podemos ver que RR interpreta o ano 81 como 1981, enquanto YY interpreta como 2081.
  • Ao usar YY , o ano retornado sempre tem os mesmos 2 primeiros dígitos do ano atual.
  • Com RR , o século do valor de retorno varia de acordo com o ano de dois dígitos especificado e os dois últimos dígitos do ano atual.

Veja como a documentação do Oracle explica:
  • Se o ano de dois dígitos especificado for de 00 a 49, então
    • Se os dois últimos dígitos do ano atual forem de 00 a 49, o ano retornado terá os mesmos dois primeiros dígitos do ano atual.
    • Se os dois últimos dígitos do ano atual forem de 50 a 99, os dois primeiros dígitos do ano retornado serão um a mais que os dois primeiros dígitos do ano atual.
  • Se o ano de dois dígitos especificado for de 50 a 99, então
    • Se os dois últimos dígitos do ano atual forem de 00 a 49, os dois primeiros dígitos do ano retornado serão um a menos que os dois primeiros dígitos do ano atual.
    • Se os dois últimos dígitos do ano atual forem de 50 a 99, o ano retornado terá os mesmos dois primeiros dígitos do ano atual.

O RRRR e YYYY Elementos de formato


Aqui está um exemplo que compara o RRRR e YYYY elementos de formato:
SELECT 
    TO_CHAR(TO_DATE('20-Dec-81', 'DD-Mon-RRRR'), 'YYYY') AS "RRRR",
    TO_CHAR(TO_DATE('20-Dec-81', 'DD-Mon-YYYY'), 'YYYY') AS "YYYY"
FROM DUAL;

Resultado:
   RRRR    YYYY 
_______ _______ 
1981    0081   

Neste caso, RRRR retorna o mesmo ano em que RR fez, mas YYYY retorna o ano 0081.

Os exemplos acima assumem que você sabe como TO_CHAR() e TO_DATE() trabalhar. Veja Oracle TO_CHAR(datetime) Função e Oracle TO_DATE() Função no Oracle para mais informações.