2013-03-19 33 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年