2011-07-25 30 views
12

tôi có 2 truy vấn trong SQL:là gì sự khác biệt giữa 'YYYY' và 'RRRR' trong Oracle SQL

select trunc(to_date('27-Jul-1987'),'YYYY') FROM dual; 

select trunc(to_date('27-Jul-1987'),'RRRR') FROM dual; 

Cả hai đều đem lại cho tôi những kết quả tương tự. Sự khác nhau giữa 'RRRR' và 'YYYY' là gì?

+0

Ngay cả mã của bạn tương tự như những gì bạn đã được đăng ở đây (tôi nói tương tự vì SQL 'select' không được phép trong một khối PL/SQL, thay vì' chọn into' phải được sử dụng) có thể được đặt trong một khối PL/SQL câu hỏi của bạn không phải là PL/SQL liên quan ở tất cả, nhưng vấn đề Oracle SQL. – user272735

+1

Rtm. Nó nhanh hơn! http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/sql_elements004.htm#i34924 – zep

Trả lời

26

YYYY cho năm hiện tại là 4 chữ số.

RRRR định dạng có nghĩa là năm 2 chữ số trong phạm vi 00 để 49 được giả định là trong hiện thế kỷ (tức là có cùng hai chữ số đầu tiên là năm nay), và năm đưa ra là 50 qua 99 được giả nằm trong trước đó thế kỷ.

+0

Hmm, tôi đang báo cáo từ một bảng Oracle có cột DATE và nó mang lại cho tôi những năm xa lạ cho dù tôi sử dụng rrrr hay yyyy. chọn IVDATE , to_char (IVDATE, 'yyyy-mm-dd') như YYYYdate , to_char (IVDATE, 'RRRR-mm-dd') như RRRRdate từ DODGYTABLE nơi IVDATE Davos

4

này:

SQL> select to_char(to_date('72-01-01','rrrr-mm-dd'),'yyyy') from dual; 

sẽ cung cấp cho bạn:

Nhưng điều này:

SQL> select to_char(to_date('72-01-01','yyyy-mm-dd'),'yyyy') from dual; 

sẽ cung cấp cho bạn:

0072 
4

Nếu 2 chữ số đầu tiên trong năm nay không được chỉ định trong ngày được chuyển đổi:

  • YYYY sẽ luôn luôn trở lại năm nay.
  • RRRR trả về năm dựa trên năm được chỉ định hiện tại trong cơ sở dữ liệu.

Hãy thử mẫu mã này:

SELECT TO_DATE ('010199', 'MMDDYYYY') AS date_a, 
     TO_DATE ('010199', 'MMDDYY') AS date_b, 
     TO_DATE ('010199', 'MMDDRR') AS date_c, 
     TO_DATE ('010199', 'MMDDRRRR') AS date_d 
    FROM DUAL; 

Kết quả khi chạy trên 2014/12/01:

DATE_A  DATE_B  DATE_C  DATE_D 
--------- --------- ---------  --------- 
1/1/0099  1/1/2099  1/1/1999  1/1/1999 

này oracle link đưa ra một mô tả tuyệt vời và các ví dụ.

Từ trên link:

  • Nếu quy định năm hai chữ số là 00-49, sau đó
    • Nếu hai số cuối của năm nay là 00 đến 49, thì năm trả về có hai chữ số đầu tiên giống như năm hiện tại.
    • Nếu hai chữ số cuối của năm hiện tại là 50 đến 99, thì 2 chữ số đầu tiên của năm được trả lại là 1 lớn hơn 2 chữ số đầu tiên của năm hiện tại.
  • Nếu quy định năm hai chữ số là 50 đến 99, sau đó
    • Nếu hai số cuối của năm nay là 00-49, sau đó 2 chữ số đầu tiên của năm trở lại là 1 ít hơn 2 chữ số đầu tiên của năm hiện tại.
    • Nếu hai số cuối của năm hiện tại là 50 đến 99, thì năm trả về có hai số đầu tiên giống như năm hiện tại.
Các vấn đề liên quan