首页 > 解决方案 > 在 PROC SQL 和 Teradata 中使用数据语句过滤记录时遇到麻烦

问题描述

在 proc sql 中,我希望通过日期范围过滤我的结果,并且我不断收到错误。我的日期变量是 DATE8,格式是 04JUL1776。

我尝试在代码中的特定日期周围添加一些输入。那没有产生任何结果。

proc sql noprint;
%tdconnectTo;
create table ptemp.DL2_2018_IDS as
select * from connection to Teradata (
select     distinct
           PERS_ID
     , REC_EFF_DT
     , REC_TERM_DT
from       oeauacbrgdlp1.DV_DIM_MBR
where      PERS_ID is not null
and        REC_EFF_DT <= '31DEC2018'd and REC_TERM_DT >= '01JAN2018'd
order by PERS_ID
);
disconnect from teradata;
quit;

标签: sqldatesasteradata

解决方案


如果您使用的是传递 SQL,那么您需要以数据库可接受的形式提供值。对于 SQL 日期文字:

REC_EFF_DT <= date'2018-12-31' and REC_TERM_DT >= date'2018-01-01'

或者如果您出于某种原因确实需要以 SAS DATE9 形式提供字符串值,则应明确告诉数据库将该字符串转换为日期:

REC_EFF_DT <= to_date('31DEC2018','DDMONYYYY') and REC_TERM_DT >= to_date('01JAN2018','DDMONYYYY')

或者

REC_EFF_DT <= CAST('31DEC2018' AS DATE FORMAT'DDMMMYYYY') and REC_TERM_DT >= CAST('01JAN2018' AS DATE FORMAT'DDMMMYYYY')

推荐阅读