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.