ما الفرق بين قناع التاريخ "yy" و "rr" الخاص بـ Oracle؟

StackOverflow https://stackoverflow.com/questions/19058

  •  09-06-2019
  •  | 
  •  

سؤال

مثال:

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')

إرجاع نتائج مختلفة

هل كانت مفيدة؟

المحلول

http://oracle.ittoolbox.com/groups/technical-functional/oracle-dev-l/difference-between-yyyy-and-rrrr-format-519525

يسمح لك YY باسترداد رقمين فقط من العام ، على سبيل المثال ، 99 في عام 1999.يتم تعيين الأرقام الأخرى (19) تلقائيًا إلى القرن الحالي.يقوم RR بتحويل السنوات المكونة من رقمين إلى سنوات مكونة من أربعة أرقام عن طريق التقريب.

يتم تخزين 50-99 كـ 1950-1999 ، ويتم تخزين التواريخ التي تنتهي في 00-49 كـ 2000-2049.يقبل RRRR مدخلات مكونة من أربعة أرقام (على الرغم من أنها غير مطلوبة) ، وتحول تواريخ من رقمين كما يفعل RR.يقبل Yyyy مدخلات من 4 أرقام لا يقومون بتحويل أي تاريخ

بشكل أساسي، المثال الأول الخاص بك سيفترض أن 81 هو 2081 بينما المثال RR يفترض 1981.لذلك يجب ألا يُرجع المثال الأول أي صفوف لأنك على الأرجح لم تقم بتعيين أي أشخاص بعد 1 مايو 2081 حتى الآن :-)

نصائح أخرى

@مايكل ستوم

تجربتي الأخيرة مع أوراكل كانت منذ فترة طويلة

اه، هل كان ذلك قبل عام 2000؟:ص

...

هل ستفترض دائمًا 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 

/ النائب

التوافق Y2K.rr يفترض أن 01 هو 2001، yy يفترض أن 01 هو 1901

يرى: http://www.oradev.com/oracle_date_format.jsp

يحرر:اللعنة! جذع مايكل "الأصابع السريعة". اسبقني!

/ النائب

يعرض RR أربعة أرقام مثل 1999 أو 2015 (إذا كان أقل من 49، فسيتم اعتباره القرن العشرين)

حول RR أو RRRR

عندما نقوم بإدخال التواريخ المكونة من رقمين (أي:09/أكتوبر/15) ثم قد يغير Oracle القرون تلقائيًا وبالتالي فإن الحل هو 4 تواريخ.ولكن تم تقديم إصدار من 4 أرقام في بعض الإصدارات الحديثة ، وبالتالي كانت حلول هذه المشكلة في الإصدارات السابقة RR أو RRRR.لكن لاحظ أنه يعمل فقط مع TO_DATE() وظيفة ولكن ليس مع TO_CHAR() وظيفة.

عندما يتم إجراء عمليات الإدراج/التحديثات في التواريخ، يجب علينا دائمًا توضيح التاريخ الحالي الذي يعمل على مدار الساعة فيما يتعلق بترجمة التاريخ نظرًا لأن Oracle تجري كل ترجمة للتاريخ عن طريق الاتصال بالخادم.

من أجل الحفاظ على الاتساق بين القرون، فمن الأفضل دائمًا تنفيذ ترجمة التاريخ بأربعة أرقام.

حول YY أو YYYY

يقبل التواريخ ولكن ليس لديه وظيفة لتغييرها تلقائيًا.

توضح هذه الصورة السلوك عند إدخال تاريخ مكون من رقمين (أي:09/أكتوبر/15)

يشير RR إلى ما بعد عام 1990 ويفترض yy أن 90 هو عام 2090.... كما نحن في العام الحالي،...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top