2014-01-22 82 views
1

我想將當前日期插入到我的表格的其中一列中。我使用了以下內容:來自SYSDATE的年份格式值

to_date(SYSDATE, 'yyyy-mm-dd')); 

這是偉大的工作,但它顯示的一年「0014」。有什麼方法可以讓我把年份顯示爲'2014'?

+2

插入它作爲'TRUNC(sysdate)'會做。日期實際上沒有內部格式。 'TRUNC()'actualy會在當前日期時間內修剪時間元素。並返回今天的日期,時間爲'00:00:00' –

回答

2

to_date用於將字符串轉換爲日期...嘗試to_char(SYSDATE,'yyyy-mm-dd')將日期轉換爲字符串。

+0

我投到字符,然後到目前爲止。現在的一年顯示了我想要的方式。 'to_date(to_char(SYSDATE,'yyyy-mm-dd'),'yyyy-mm-dd')' – C1pher

2

to_date函數將字符串轉換爲日期。 SYSDATE已經是一個日期,所以這將做的是首先將SYSDATE轉換爲字符串,使用NLS設置指定的會話日期格式,然後使用指定的日期格式將該字符串轉換回日期(yyyy-mm- DD)。這可能會也可能不會給出正確的結果,具體取決於會話的NLS日期設置。

簡單而正確的解決方案是從此跳過to_date並直接使用SYSDATE。

+0

將SYSDATE轉換爲字符串將使用會話的NLS_DATE_FORMAT,而不是「數據庫的默認日期格式」。如果客戶都在相同的地理區域,他們可能都擁有相同的'NLS_DATE_FORMAT',但如果您在美國擁有客戶並且在Eurpoe擁有客戶,則很有可能您在不同的客戶端擁有不同的設置。 –

+0

@JustinCave - 好點,我相應地編輯了我的答案。 – GTG

-6

試試這個TO_DATE(SYSDATE, 'DD-MM-YY')

3

將其插入作爲TRUNC(sysdate)會做。 Date實際上沒有內部格式,因爲它是DataType本身。 TRUNC()actualy將只修整當前日期時間中的時間元素,並將時間返回爲00:00:00

解釋您的情況發生了什麼。

說烏爾NLS_DATE_FORMAT="YY-MM-DD"

的處理進行像以下

select to_date(to_char(sysdate,'YY-MM-DD'),'YYYY-MM-DD') from dual; 

輸出:

TO_DATE(TO_CHAR(SYSDATE,'YY-MM-DD'),'YYYY-MM-DD') 

January, 22 0014 00:00:00+0000 


2014 - 首先在to_char()之後減至'14',之後再轉換爲YYYY ..因爲當前世紀細節是最後一個,所以它將被視爲0014

+0

這看起來很有希望,但我已經引入了另一種解決方案。 – C1pher

+0

我在上面看到您的評論,TRUNC()在單個函數調用中也是如此。無論如何沒有問題! –