R RODBC sprintf无法正常工作

时间:2017-12-08 20:39:16

标签: r printf rodbc

我熟悉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'“

1 个答案:

答案 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