无法将varchar转换为Date

时间:2018-10-09 20:46:27

标签: sql oracle oracle11g

我有一个表,其日期为varchar类型,结果输出的日期(Begin_date)为'20130630'格式。 我需要将开始日期输出转换为日期。只要是日期,什么日期格式都没有关系。

我尝试了这些,但似乎都没有用。我收到ORA-01843无效的月份错误。

to_date(aa.Begin_date, 'yyyymmdd')
to_char(to_date(aa.Begin_date, 'yyyymmdd'), 'dd-mm-yy') 
to_char(to_date(aa.Begin_date, 'yyyymmdd'), 'dd-MON-yy')

2)另外,某些开始日期的格式为20030000。从本质上讲,我们仅知道年份。我需要有一个输入1月1日和年份(无关紧要的格式)的输出。

Case when aa.begin_date between '1900' and '2030' 
   then to_date('0101'+aa.begin_date,'YYYYMMDD') 

我尝试了一个类似的声明

case when aa.begin_date like '%0000' 
   then to_date('0101'+aa.begin_date,'YYYYMMDD') 
end as tes

2 个答案:

答案 0 :(得分:4)

您可以尝试以下操作:

with test_data as
( select '20130630' begin_date from dual 
  union
   select '20030000' begin_date from dual 
)
select 
case when test_data.begin_date like '%0000' then
    to_date(substr(begin_date,1,4)||'0101','YYYYMMDD') 
    else to_date(begin_date,'YYYYMMDD') end my_date
from test_data

但是最好的办法是将数据模型更正为使用实际的DATE类型。将日期存储为字符串是错误的设计。

答案 1 :(得分:0)

这将起作用:

SELECT to_date('20130630','YYYYMMDD') FROM dual