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
.
我熟悉 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
:
'%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
.