R RODBC sprintf 不工作

R RODBC sprintf not working

我熟悉 SAS,但不熟悉 R。我正在尝试从 Netezza 数据集市中提取数据,并且可以通过输入日期来获取数据。但是当我尝试将 sprintf 与动态日期一起使用时,错误消息如下所示。感谢阅读我的 post,感谢您的任何帮助,谢谢!

我的代码在输入日期时有效:

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)
)

错误消息是

test [1] "HY000 46 ERROR: Inconsistent datatypes 'DATE' and 'INT4'"
[2] "[RODBC] ERROR: Could not SQLExecDirect '\n SELECT DISTINCT\n ............................ AND J.DATA_AS_OF_DT= 2017-11-30\n \n \n '"

您应该在 sprintf:

中使用的字符串中将 SQL 字符串括在引号 ('%s') 中
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.