Попробуйте (не проверено)
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
- Масштабирование переведенного значения даты до значения datetime (aka timestamp).
Значения даты, когда они пропущены как значения 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