Вставка данных в Teradata с помощью Proc SQL - PullRequest
0 голосов
/ 11 февраля 2019

Мне нужно вставить данные в Teradata из SAS EG.Я использую Proc SQL для этого.

Вставка данных происходит, но с неправильной датой.

Я пробовал другие форматы, но дата все еще наступает как 01-01-1960

Proc Sql;
insert into teradata (emailid,status,delivery_date) select emailid,status,delivery_date from table;
quit;

Обратите внимание, что эта дата вставлена ​​в терадаты как 01-01-1960.Но фактическая дата была 11 февраля 2018 года.

1 Ответ

0 голосов
/ 11 февраля 2019

Попробуйте (не проверено)

Proc Sql;
  insert into teradata (emailid,status,delivery_date)
  select 
      emailed
    , status
    , ( delivery_date - '01JAN1970'D ) * 86400
  from
    table
  ;
quit;

или

%macro SAS_D_to_TERA_TS (sas_date);
  ( &sas_date - '01JAN1970'D ) * 86400
%mend;
… 
  , %SAS_D_to_TERA_TS ( delivery_date )

SAS DATETIME - это количество десятичных секунд, начиная с 01-JAN-1960.
SAS DATE - это количество дней с01-JAN-1960.
Значения Teradata TIMESTAMP представляют собой количество десятичных секунд, поскольку 01-JAN-1970.

DATETIME и TIMESTAMP имеют одинаковые единицы измерения, хотя разные источники (эпоха)

Преобразование из SASзначение даты в значение метки времени Teradata требует

  • Преобразование значения даты SAS в эпоху Teradata в виде даты SAS
    • - '01-JAN-1970'D
  • Масштабирование переведенного значения даты до значения datetime (aka timestamp).
    • * 86400 (секунд в дне)

Значения даты, когда они пропущены как значения DateTime

data _null_;    
  delivery_date = '11FEB2018'D;

  put delivery_date= MMDDYY10.;
  put delivery_date= DATETIME.;

  delivery_date_dt = delivery_date * 86400;
  put delivery_date_dt= DATETIME.;

  sas_date_epoch = '01JAN1960'D;
  put sas_date_epoch=;

  teradata_date_epoch = '01JAN1970'D;
  put teradata_date_epoch= 'days after SAS epoch';
run;
----------- LOG -----------
delivery_date=02/11/2018
delivery_date=01JAN60:05:53:46
delivery_date_dt=11FEB18:00:00:00
sas_date_epoch=0
teradata_date_epoch=3653 days after SAS epoch
...