Вставка строки формата MDDYYYY или MDYYYY в столбец даты - PullRequest
0 голосов
/ 17 мая 2019

Я получаю даты в файлах .csv от бизнес-команды.Иногда они отправляют его в формате MDDYYYY, и я использовал LPAD и TO_DATE, чтобы вставить этот формат строки в столбец DATE.Однако это не удалось, когда файл имел 3-го мая как 532019. Не могли бы вы предложить, как вставить эту строку в столбец даты.

INSERT INTO USB.BAS2_AGENCY_TO_RISKRATING_TRAN
(AS_OF_DATE)
VALUES
(TO_DATE(LPAD(5032019,8,0),'MMDDYYYY')); 

Это работает для исходных значений MDDYYYY, но не для MDYYYY.Мне нужно что-то, что будет работать в обоих случаях.

Ответы [ 2 ]

2 голосов
/ 17 мая 2019

Это должно быть исправлено на передней части. Я предлагаю, чтобы ваша деловая команда отправила их даты в согласованном формате. Глупо иметь дело с датами, которые встречаются как 532019, 5032019 или 05032019 - все они представляют 3 мая 2019 года.

1 голос
/ 17 мая 2019

Не существует автоматического способа сделать это, или волшебной модели формата даты, которая может справиться с этим.Вам придется больше манипулировать номером источника (в виде строки), исходя из его длины.

Демонстрация, при условии, что всегда есть 6-8 цифр:

-- CTE for some sample numbers
with cte (num) as (
            select   532019 from dual
  union all select  5032019 from dual
  union all select 05032019 from dual
  union all select 12032018 from dual
  union all select  1232018 from dual
  union all select  1112018 from dual
)
select num,
  case when length(num) = 6 then '0' || substr(num, 1, 1)
                              || '0' || substr(num, 2, 5)
       else to_char(num, 'FM00000000')
  end as full_num,
  to_date(case when length(num) = 6 then '0' || substr(num, 1, 1)
                                             || '0' || substr(num, 2, 5)
               else to_char(num, 'FM00000000')
          end, 'MMDDYYYY') as full_date
from cte;

       NUM FULL_NUM  FULL_DATE 
---------- --------- ----------
    532019 05032019  2019-05-03
   5032019 05032019  2019-05-03
   5032019 05032019  2019-05-03
  12032018 12032018  2018-12-03
   1232018 01232018  2018-01-23
   1112018 01112018  2018-01-11

Однакоэто действительно не должно быть необходимым;и обратите внимание на двусмысленность, особенно в последнем ряду - должно ли быть расширено 1112018 до 01112018 или 11012018?У вас нет возможности узнать.

Я предлагаю вам поговорить с тем, кто отправляет вам эти данные, и попросить их исправить процесс в конце, желательно всегда передавать однозначное набранное нулем 8-значное число -или, что еще лучше, однозначные литералы даты ANSI вместо цифр.

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