2011-07-25 59 views
12

'YYYY' 和 'RRRR' 之間的區別我有2個查詢在SQL:有什麼用Oracle SQL

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

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

兩者都讓我有同樣的結果。 'RRRR'和'YYYY'有什麼區別?

+0

即使你的代碼相似,你已經張貼在這裏什麼(我說的類似,因爲SQL'select'不是在PL/SQL塊允許的,而不是'選擇into'必須使用)可能位於PL/SQL塊中,你的問題根本不是PL/SQL相關的,而是Oracle SQL問題。 – user272735

+1

Rtm。速度更快! http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/sql_elements004.htm#i34924 – zep

回答

26

YYYY給出當前年份爲4位數。

RRRR格式裝置2位數年的範圍0049被假定爲在當前世紀(即具有相同的前兩個數字作爲當前年),以及給定的年50通過99被假定在之前的世紀。

+0

嗯,我從具有DATE列的Oracle表報告,它給了我奇怪的歲月無論我使用rrrr還是yyyy。 選擇IVDATE ,TO_CHAR(IVDATE, 'YYYY-MM-DD')作爲YYYYdate ,TO_CHAR(IVDATE, 'RRRR-MM-DD')作爲RRRRdate 從DODGYTABLE 其中IVDATE Davos

4

此:

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

會給你:

但這:

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

會給你:

0072 
4

如果該日期是不指定的第一個2個位數的年份轉換:

  • YYYY總是返回當前年份。
  • RRRR根據數據庫中當前指定的年份返回年份。

試試這個示例代碼:

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; 

結果當2014年12月1日運行:

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

此Oracle link給出了一個偉大的說明和例子。

從上面link

  • 如果指定的兩位數的年份是00到49,然後
    • 如果當前年份的最後兩個數字是00到49,那麼返回的年份與當年的前兩位數字相同。
    • 如果當年的最後兩位數字是50到99,則返回年份的前兩位數字比當前年份的前兩位數字大1。
  • 如果指定的兩位數的年份是50〜99,然後
    • 如果當前年的最後兩位數字是00至49,則返回的一年中的前2位是1以上本年度的前兩位數字。
    • 如果當年的最後兩位數字是50到99,那麼返回的年份與當年的前兩位數字相同。