RR日付時刻フォーマット要素は、YY日付時刻フォーマット要素と似ていますが、世紀をまたぐ日付値の保存に対して追加の柔軟性を提供します。
YY日付時刻フォーマット要素では、年のすべての数字を指定する必要があります。一方、RR日付時刻フォーマット要素では、年の数字の下2桁だけを指定することで、日付値を保存できます。
RR日付時刻フォーマット要素はTO_DATE関数と一緒に使用され、返される値の世紀は、指定された2桁の年と現在の年の下2桁によって変更されます。YY日付時刻フォーマット要素がTO_DATE関数と一緒に使用される場合、返される年は常に現在の年と同じ世紀になります。
指定された2桁の年が00〜49で、現在の年の下2桁が00〜49の場合、返される年は現在の年と同じ世紀になります。現在の年の下2桁が50〜99の場合、返される年の最初の2桁は次の世紀になります。
指定された2桁の年が50〜99で、現在の年の下2桁が00から49の場合、返される年の最初の2桁は現在の年の前の世紀になります。現在の年の下2桁が50〜99の場合、返される年は現在の年と同じ世紀になります。
以下の例のように、RR日付時刻フォーマット要素は、最初の2桁が異なる年に対して同じ値を返します。これらのクエリが1950〜1999年の間に実行されたと仮定し、次のステートメントを実行します:
SELECT TO_CHAR(TO_DATE('27-OCT-98', 'DD-MON-RR'), 'YYYY') "Year1" ,
TO_CHAR(TO_DATE('27-OCT-17', 'DD-MON-RR'), 'YYYY') "Year2" FROM DUAL;
クエリ結果は次のとおりです:
+-------+-------+
| Year1 | Year2 |
+-------+-------+
| 1998 | 2017 |
+-------+-------+
これらのクエリが2000〜2049年の間に実行されたと仮定し、次のステートメントを実行します:
SELECT TO_CHAR(TO_DATE('27-OCT-98', 'DD-MON-RR'), 'YYYY') "Year1" ,
TO_CHAR(TO_DATE('27-OCT-17', 'DD-MON-RR'), 'YYYY') "Year2" FROM DUAL;
クエリ結果は次のとおりです:
+-------+-------+
| Year1 | Year2 |
+-------+-------+
| 1998 | 2017 |
+-------+-------+
上記の2つの例のクエリ結果から、2000年以前または以降のいずれのクエリでも、同じ値が返されることがわかります。