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年以前でも以降でもクエリを実行した場合、同じ値が返されることがわかります。