我想將當前日期插入到我的表格的其中一列中。我使用了以下內容:來自SYSDATE的年份格式值
to_date(SYSDATE, 'yyyy-mm-dd'));
這是偉大的工作,但它顯示的一年「0014」。有什麼方法可以讓我把年份顯示爲'2014'?
我想將當前日期插入到我的表格的其中一列中。我使用了以下內容:來自SYSDATE的年份格式值
to_date(SYSDATE, 'yyyy-mm-dd'));
這是偉大的工作,但它顯示的一年「0014」。有什麼方法可以讓我把年份顯示爲'2014'?
to_date用於將字符串轉換爲日期...嘗試to_char(SYSDATE,'yyyy-mm-dd')將日期轉換爲字符串。
我投到字符,然後到目前爲止。現在的一年顯示了我想要的方式。 'to_date(to_char(SYSDATE,'yyyy-mm-dd'),'yyyy-mm-dd')' – C1pher
to_date函數將字符串轉換爲日期。 SYSDATE已經是一個日期,所以這將做的是首先將SYSDATE轉換爲字符串,使用NLS設置指定的會話日期格式,然後使用指定的日期格式將該字符串轉換回日期(yyyy-mm- DD)。這可能會也可能不會給出正確的結果,具體取決於會話的NLS日期設置。
簡單而正確的解決方案是從此跳過to_date並直接使用SYSDATE。
將SYSDATE轉換爲字符串將使用會話的NLS_DATE_FORMAT,而不是「數據庫的默認日期格式」。如果客戶都在相同的地理區域,他們可能都擁有相同的'NLS_DATE_FORMAT',但如果您在美國擁有客戶並且在Eurpoe擁有客戶,則很有可能您在不同的客戶端擁有不同的設置。 –
@JustinCave - 好點,我相應地編輯了我的答案。 – GTG
試試這個TO_DATE(SYSDATE, 'DD-MM-YY')
將其插入作爲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
!
這看起來很有希望,但我已經引入了另一種解決方案。 – C1pher
我在上面看到您的評論,TRUNC()在單個函數調用中也是如此。無論如何沒有問題! –
插入它作爲'TRUNC(sysdate)'會做。日期實際上沒有內部格式。 'TRUNC()'actualy會在當前日期時間內修剪時間元素。並返回今天的日期,時間爲'00:00:00' –