質問
例:
select ename from emp where hiredate = todate('01/05/81','dd/mm/yy')
そして
select ename from emp where hiredate = todate('01/05/81','dd/mm/rr')
異なる結果を返す
解決
YYでは、たとえば1999年の99など、1年の2桁のみを取得できます。他の数字(19)は、現在の世紀に自動的に割り当てられます。RR は、四捨五入により 2 桁の年を 4 桁の年に変換します。
50-99は1950-1999として保存され、00-49で終了する日付は2000-2049として保存されます。RRRRは4桁の入力を受け入れ(必要ありませんが)、RRと同様に2桁の日付を変換します。yyyyは、4桁の入力を受け入れます
基本的に、最初の例では 81 が 2081 であると想定されますが、RR の例では 1981 が想定されます。したがって、2081 年 5 月 1 日以降はまだ誰も雇用していない可能性が高いため、最初の例では行は返されません:-)
他のヒント
最後に Oracle を使用したのは少し前のことです
うーん、2000年より前だったかな?:p
...
yy は常に 19xx と想定されますか?
あなたの情報源によると, 、次のシナリオが得られます。
USING
ENTERED
STORED
SELECT of date column
YY
22-FEB-01
22-FEB-1901
22-FEB-01
YYYY
22-FEB-01
22-FEB-0001
22-FEB-0001
RR
22-FEB-01
22-FEB-2001
22-FEB-01
RRRR
22-FEB-01
22-FEB-2001
22-FEB-2001
/mp
y2k互換性。rr は 01 を 2001 と仮定し、yy は 01 を 1901 と仮定します
見る: http://www.oradev.com/oracle_date_format.jsp
編集:くそ! マイケル「クイックフィンガーズ」スタム 私をそれに打ち負かしてください!
/mp
RR は 4 桁で 1999 または 2015 を表示します (49 未満の場合は 20 世紀とみなされます)
RRまたはRRRRについて
2 桁の年を含む日付を挿入する場合 (つまり、09/OCT/15)その後、Oracleは何世紀にもわたって自動的に変更される可能性があるため、解決策は4桁の日付です。しかし、4桁のバージョンがいくつかの最近のバージョンで導入されているため、以前のバージョンのこの問題の解決策は RR
または RRRR
. 。しかし、それはでのみ機能することに注意してください TO_DATE()
関数ではありませんが、 TO_CHAR()
関数。
Oracle はサーバーに接続してすべての日付変換を実行するため、日付に基づいて挿入/更新が実行されるときは常に、日付変換に関連してクロックで実行されている現在の日付を明確にする必要があります。
世紀間の一貫性を維持するには、4 桁の年を使用して日付の変換を実行することをお勧めします。
YY または YYYY について
日付は受け入れられますが、日付を自動的に変更する機能はありません。
RR は 1990 年以降を表し、yy は 90 を 2090 年と仮定します。現在の年では、...