【发布时间】:2017-08-31 14:40:03
【问题描述】:
我在将 varchar(yyyymmdd) 转换为 date(yyyymmdd) 时遇到问题。
我有一个带有参数(pdate varchar2,yyyymmdd 格式)的过程,它也需要转换为 yyyymmdd 格式的日期类型。 到目前为止我试过了。
vdate date;
vdate := (to_date(SUBSTR(pdate,1,4)+SUBSTR(pdate,5,2)+SUBSTR(pdate,7,2), 'yyyymmdd'));
这引发了一个错误 ORA-01840: input value not long enough for date format。
任何帮助将不胜感激。
【问题讨论】:
-
更新失败的价值是什么?将
+更改为||考虑:SELECT (SUBSTR('20170101',1,4)||SUBSTR('20170101',5,2)||SUBSTR('20170101',7,2)) , to_date(SUBSTR('20170101',1,4)||SUBSTR('20170101',5,2)||SUBSTR('20170101',7,2),'YYYYMMDD') , To_date('20170101','YYYYDDMM') from dual; -
您只需要
to_date(pdate, 'yyyymmdd'),假设您的 pdate 包含完整的信息集。事实上,我很确定你可以摆脱你的程序而只使用to_date()函数! -
正如已经指出的那样,您的尝试失败的原因是连接是在 Oracle 中使用
||完成的,而不是使用+完成的。您正在做的是将年份、月份和日期提取为字符串(四位数、两位数、两位数)。然后你添加他们。在幕后,Oracle 将它们转换为NUMBER并添加它们。然后应用to_date(),它接受varchar2输入,因此Oracle(再次在幕后)将加法的结果转换为四个字符的字符串。这还不足以成为约会(无论如何这都是错误的!)