When formatting dates in Oracle Database, we have the option of using RR
and YY
to return a two digit year.
These two format elements are similar. The difference is in how they interpret two digits years.
We also have the option of using RRRR
and YYYY
when returning four digit years.
Example
Here’s an example that compares the RR
and YY
format elements:
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;
Result:
RR YY _______ _______ 1981 2081
We can see that RR
interprets the year 81 as 1981, while YY
interprets it as 2081.
- When using
YY
, the year returned always has the same first 2 digits as the current year. - With
RR
, the century of the return value varies according to the specified two-digit year and the last two digits of the current year.
Here’s how the Oracle documentation explains it:
- If the specified two-digit year is 00 to 49, then
- If the last two digits of the current year are 00 to 49, then the returned year has the same first two digits as the current year.
- If the last two digits of the current year are 50 to 99, then the first 2 digits of the returned year are 1 greater than the first 2 digits of the current year.
- If the specified two-digit year is 50 to 99, then
- If the last two digits of the current year are 00 to 49, then the first 2 digits of the returned year are 1 less than the first 2 digits of the current year.
- If the last two digits of the current year are 50 to 99, then the returned year has the same first two digits as the current year.
The RRRR
and YYYY
Format Elements
Here’s an example that compares the RRRR
and YYYY
format elements:
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;
Result:
RRRR YYYY _______ _______ 1981 0081
In this case, RRRR
returns the same year that RR
did, but YYYY
returns the year 0081.
The above examples assume that you know how TO_CHAR()
and TO_DATE()
work. See Oracle TO_CHAR(datetime)
Function and Oracle TO_DATE()
Function in Oracle for more info.