我似乎无法FROM使用RODBC的以下条款来工作sqlQuery。我接受了@Lars Br的建议。的报价,但它仍然无法正常工作。我是
FROM
sqlQuery
我知道占位符的作品,因为我在qlikview中使用过
所以下面的代码有效
table <- sqlQuery(myconn, 'SELECT * FROM "_SYS_BIC"."mytable.TABLE/ALL_DATA"')
但是当我尝试添加以下内容时(我在传递日期参数)
table <- sqlQuery(myconn, 'SELECT * FROM "_SYS_BIC"."mytable.TABLE/ALL_DATA"') ('PLACEHOLDER' = ('$$AS_OF_DATE$$', '2017-01-09'), 'PLACEHOLDER' = ('$$ABCD_ONE$$', '0'), 'PLACEHOLDER' = ('$$ABCD_TWO$$', '0'), 'PLACEHOLDER' = ('$$EFGH$$', '12345'), 'PLACEHOLDER' = ('$$FLAG$$', '1'))')
现在我知道我的单引号弄乱了它,所以我尝试了以下内容。
在这里,您将陷入嵌套语法和多级语句处理的陷阱:
table <- sqlQuery >(< myconn, 'SELECT * FROM "_SYS_BIC"."mytable.TABLE/ALL_DATA"'>)< ---! ('PLACEHOLDER' = ('$$AS_OF_DATE$$', '2017-01-09'), 'PLACEHOLDER' = ('$$ABCD_ONE$$', '0'), 'PLACEHOLDER' = ('$$ABCD_TWO$$', '0'), 'PLACEHOLDER' = ('$$EFGH$$', '12345'), 'PLACEHOLDER' = ('$$FLAG$$', '1'))')
对于R,您的命令在我放置的位置结束,< ---!其余所有内容对R都是无效的。 在这种情况下,请记住sqlQuery()函数期望第二个参数中包含 整个 SQL命令字符串,这一点很重要。这包括HANA的WITH PARAMETER语法。
< ---!
为了避免此类问题,可以先将SQL命令分配给变量,然后仅在函数调用中使用该变量。 为了使用R变量设置参数,可以使用文本替换。
# create the date parameter in the right format YYYY-MM-DD selDate <- format(Sys.Date() , "%F")
selDate [1]“ 2017-02-04”
# create the base SQL command with %D as a placeholder for the selDate # note how all single quotes inside the sqlCMD need to be escaped by a \ sqlCMD <- 'SELECT * + FROM "_SYS_BIC"."mytable.TABLE/ALL_DATA" + (\'PLACEHOLDER\' = (\'$$AS_OF_DATE$$\', \'%D\'), + \'PLACEHOLDER\' = (\'$$ABCD_ONE$$\', \'0\'), + \'PLACEHOLDER\' = (\'$$ABCD_TWO$$\', \'0\'), + \'PLACEHOLDER\' = (\'$$EFGH$$\', \'12345\'), + \'PLACEHOLDER\' = (\'$$FLAG$$\', \'1\'))'
sqlCMD [1]“ SELECT * \ n + FROM \” _ SYS_BIC \“。\” mytable.TABLE / ALL_DATA \“ \ n +(’PLACEHOLDER’=(’$$ AS_OF_DATE $$’,’%D’),\ n +’ PLACEHOLDER’=(’‘$$ ABCD_ONE $$’,‘0’),\ n +’PLACEHOLDER’=(’$$ ABCD_TWO $$,‘0’),\ n +’PLACEHOLDER’=(’$$ EFGH $$ ‘,‘12345’),\ n +’PLACEHOLDER’=(’$$ FLAG $$’,‘1’))“
# now subsitute the %D with the selDate sqlCMD <- gsub ("%D", selDate, sqlCMD)
sqlCMD [1]“ SELECT * \ n FROM \” _ SYS_BIC \“。\” mytable.TABLE / ALL_DATA \“ \ n(’PLACEHOLDER’=(’$$ AS_OF_DATE $$’,‘2017-02-04’), \ n’PLACEHOLDER’=(’$$ ABCD_ONE $$’,‘0’),\ n’PLACEHOLDER’=(’$$ ABCD_TWO $$’,‘0’),\ n’PLACEHOLDER’=(’$$ EFGH $$’,‘12345’),\ n’PLACEHOLDER’=(’$$ FLAG $$’,‘1’))“
# finally run the query table <- sqlQuery(myconn, sqlCMD)
当然,所有常规建议都适用(例如 不要 使用SELECT *或在获取结果数据集之前确保正确的过滤和聚合)。