Не могу конвертировать varchar в Date - PullRequest
0 голосов
/ 09 октября 2018

У меня есть таблица с датами в качестве типа 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 января и год (не имеет значения формат).

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 голосов
/ 10 октября 2018

это будет работать:

SELECT to_date('20130630','YYYYMMDD') FROM dual
0 голосов
/ 09 октября 2018

Вы можете попробовать что-то вроде этого:

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.Хранение дат в виде строки - плохой дизайн.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...