我必须将数据从SAS EG插入Teradata。我为此使用了Proc SQL。
正在插入数据,但日期错误。
我尝试了不同的格式,但是日期仍然是01-01-1960
Proc Sql;
insert into teradata (emailid,status,delivery_date) select emailid,status,delivery_date from table;
quit;
请注意,该日期插入到Teradata中的日期为01-01-1960。但实际日期是2018年2月11日。
答案 0 :(得分:1)
尝试(未试用)
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时间戳值需要
- '01-JAN-1970'D
* 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