我熟悉SAS,但对R来说很新。我正在尝试从Netezza数据集市中提取数据,并且通过输入日期来获取数据没有任何问题。但是当我尝试使用带有动态日期的sprintf时,错误消息显示如下。感谢您阅读我的帖子,感谢您的任何帮助,谢谢!
我的代码在输入日期时起作用:
test<- sqlQuery(db,"
SELECT DISTINCT
B.ACCOUNT_NB,
A.CUSTOMER_NBR,
C.DATA_AS_OF_DT as MONTH_END_ENTRY_DT_LR,
C.REGION
FROM xxxxxxx
WHERE xxxx
AND C.DATA_AS_OF_DT= '2017-11-30'
)
相同的代码在使用sprintf时不起作用:
dt='2017-11-30'
test<- sqlQuery(db,sprintf("
SELECT DISTINCT
B.ACCOUNT_NB,
A.CUSTOMER_NBR,
C.DATA_AS_OF_DT as MONTH_END_ENTRY_DT_LR,
C.REGION
FROM xxxxxxx
WHERE xxxx
AND C.DATA_AS_OF_DT= %s",dt)
)
错误信息是
测试 [1]“HY000 46错误:数据类型不一致'DATE'和'INT4'”
[2]“[RODBC]错误:无法SQLExecDirect”\ n SELECT DISTINCT \ n ............................ AND J. DATA_AS_OF_DT = 2017-11-30 \ n \ n \ n'“
答案 0 :(得分:1)
您应该将SQL字符串括在'%s'
中使用的字符串中的引号(sprintf
)中:
dt='2017-11-30'
test<- sqlQuery(db,sprintf("
SELECT DISTINCT
B.ACCOUNT_NB,
A.CUSTOMER_NBR,
C.DATA_AS_OF_DT as MONTH_END_ENTRY_DT_LR,
C.REGION
FROM xxxxxxx
WHERE xxxx
AND C.DATA_AS_OF_DT='%s'",dt)
)
否则,字符串'2017-11-30'
被解释为数学表达式2017-11-30
,在减法后产生1976
。