Sự khác nhau giữa mặt nạ ngày 'yy' và 'rr' của oracle là gì?


19

Ví dụ:

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

trở lại kết quả khác nhau

33

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

YY cho phép bạn lấy chỉ hai chữ số của một năm, ví dụ, 99 trong 1999. Các chữ số khác (19) là automaticall y được gán cho thế hệ hiện tại. RR chuyển đổi hai năm thành năm thành bốn chữ số bằng cách làm tròn.

50-99 được lưu trữ là 1950-1999 và ngày kết thúc bằng 00-49 được lưu trữ là 2000-2049. RRRR chấp nhận đầu vào gồm bốn chữ số (mặc dù không bắt buộc) và chuyển đổi hai ngày có chữ số là RR. YYYY chấp nhận đầu vào 4 chữ số butdoesn't làm bất cứ ngày chuyển đổi

Về cơ bản, ví dụ đầu tiên của bạn sẽ cho rằng 81 là 2081 trong khi một RR giả định năm 1981. Vì vậy, ví dụ đầu tiên không nên trả lại bất kỳ hàng như bạn nhất có khả năng không thuê bất kỳ kẻ nào sau ngày 1 tháng 5 năm 2081 :-)


4

khả năng tương thích y2k. rr giả định 01 là năm 2001, yy giả định 01 là 1901

see: http://www.oradev.com/oracle_date_format.jsp

chỉnh sửa: chết tiệt! michael "quickfingers" stumbeat me to it!

/mp


5

@Michael Stum

cuối cùng Oracle Kinh nghiệm của tôi là một chút từ lâu

uhm, là nó, trước năm 2000? : P

...

sẽ YY luôn giả 19xx?

according to your source, chúng tôi nhận được kịch bản sau đây:

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


-1

RR là viết tắt của sau năm 1990 và yy giả định 90 như 2090 .... như chúng tôi đang trong năm hiện tại, ...

  0

Nope ... 'rr' là khác nhau tùy thuộc vào việc bạn là [trước năm 50 của thế kỷ này] (http://docs.oracle.com/cd/E11882_01/server.112/ e26088/sql_elements004.htm # i116004) hay không. 18 nov. 122012-11-18 18:10:12


1

RR hiển thị bốn chữ số như năm 1999 hoặc năm 2015 (nếu nó là < 49 sau đó nó sẽ xem xét kỷ 20)


0

Về RR hoặc RRRR:

Khi chúng tôi đang chèn ngày với 2 degits năm tức là 09/oct/15
sau đó oracle có thể thay đổi thế kỷ một cách tự động do đó silution là 4 chữ số date.But 4 degit phiên bản được giới thiệu trong một số phiên bản rescent, htere fore các giải pháp cho vấn đề này trong phiên bản trước đó là RR hoặc RRRR, Nhưng lưu ý rằng nó chỉ hoạt động với hàm TO_DATE() nhưng hàm noth bằng hàm TO_CHAR().

Khi bao giờ chèn/cập nhật được tiến hành vào ngày chúng tôi phải luôn làm rõ ngày hiện tại chạy trong đồng hồ kết hợp với bản dịch ngày kể từ khi Oracle tiến hành mỗi bản dịch ngày bằng cách liên hệ với máy chủ.

Để duy trì sự thống nhất trong nhiều thế kỷ, tốt hơn hết là thực hiện bản dịch ngày tháng với 4 năm bị hỏng.

Giới thiệu YY hoặc YYYY:

Nó chấp nhận ngày nhưng không có chức năng tự động thay đổi.

This Image shows behaviour when inserting date with two degit no i.e. 09/oct/ 15