2013-03-19 31 views
1

當我運行:TO_DATE錯誤,而使用SUBSTR

select to_date('substr(21120319,3)','YYMMDD') 
from dual 

,我發現了錯誤:

date is not in the valid range -4719 and +9999.

但如果這樣做:

select to_date('120319','YYMMDD') 
from dual 

我的查詢運行正常,並給出輸出19-MAR-12。

這個錯誤的原因是什麼。請幫我理解這一點。

謝謝你的時間。

+0

爲什麼SUBSTR,它會返回錯誤的世紀,21120319應該回到2112年3月19日不是3月19日2012年 – Tejo 2013-03-19 14:36:29

回答

4

您必須從字符串文字中刪除substr。

select to_date(substr('21120319', 3),'YYMMDD') 
from dual ; 
+0

你真棒,謝謝,其實我想將其轉換爲MMDDYY(日期目標)如何將其保存爲目標日期中的MMDDYY? – user1751356 2013-03-19 14:31:30

+0

'to_date(substr('21120319',3),'YYMMDD')'產生一個'date',所以如果你正在接受這個字符串並想把它放到'date'字段中,就插入它。請記住'date'數據類型沒有固有的格式。格式僅用於查看日期。即'to_date('12 -mar-2012','dd-mon-yyyy')'和'to_date('20120312','yyyymmdd')'的結果在轉換爲「日期'如何查看它完全取決於你,並可以通過'to_char()'或'nls_date_format'設置 – DazzaL 2013-03-19 14:33:56

+0

@ user1751356來控制它看作'mmddyy'?做'選擇to_char(your_date_col,'MMDDYY')別名從yourtable'或...'alter session set nls_date_format ='mmddyy';'然後在該會話中的所有後續選擇例如:'select your_date_col from your_table'將顯示格式爲你 – DazzaL 2013-03-19 14:37:18

0
select to_date('substr(21120319,3)','YYMMDD') from dual ; 

現在substr(21120319,3)也是字符串的一部分

改變它

select to_date(substr('21120319',3),'YYMMDD') from dual ; 
0

你可能需要

select to_date('21120319','YYYYMMDD') 
from dual 

不用了,SUBSTR,它會返回錯誤的ce ntury,21120319應該回到2112年3月19日不是3月19日2012年