22

有没有办法将 R 中定义的变量传递给 RODBC 包中的 sqlQuery 函数?

具体来说,我需要将这样的变量传递给标量/表值函数、存储过程和/或可能是 SELECT 语句的 WHERE 子句。

例如,让:

x <- 1 ## user-defined

然后,

example <- sqlQuery(myDB,"SELECT * FROM dbo.my_table_fn (x)")

或者...

example2 <- sqlQuery(myDB,"SELECT * FROM dbo.some_random_table AS foo WHERE foo.ID = x")

或者...

example3 <- sqlQuery(myDB,"EXEC dbo.my_stored_proc (x)")

显然,这些都不起作用,但我认为有一些东西可以实现这种功能。

4

4 回答 4

20

构建您打算传递的字符串。所以而不是

example <- sqlQuery(myDB,"SELECT * FROM dbo.my_table_fn (x)")

example <- sqlQuery(myDB, paste("SELECT * FROM dbo.my_table_fn (", 
                                x, ")", sep=""))

这将填充 的值x

于 2010-12-01T23:16:50.110 回答
3

如果您使用 sprintf,您可以使用变量替换非常轻松地构建查询字符串。为了更加易于使用,如果您预先解析该查询字符串(我使用的是 stringr),您可以将它写在代码中的多行上。

例如

q1 <- sprintf("
               SELECT basketid, count(%s)
               FROM %s
               GROUP BY basketid
              "
              ,item_barcode
              ,dbo.sales
              )
q1 <- str_replace_all(str_replace_all(q1,"\n",""),"\\s+"," ")
df <- sqlQuery(shopping_database, q1)

对另一个 R 小伙的旁注和帽子提示

最近我发现我想通过使用 Python 的 string.format() 函数之类的东西来使变量替换更加简单,它可以让你在字符串中重用和重新排序变量

例如

$: w = "He{0}{0}{1} W{1}r{0}d".format("l","o")
$: print(w)
"Hello World"

然而,这个函数在 R 中似乎不存在,所以我在 Twitter 上四处询问,一个非常有帮助的小伙子@kevin_ushey回答说他自己的自定义函数要在 R 中使用。检查一下!

于 2013-03-28T14:23:58.023 回答
-2

试试这个

x <- 1
example2 <- fn$sqlQuery(myDB,"SELECT * FROM dbo.some_random_table AS foo WHERE foo.ID = '$x'")
于 2010-12-23T05:03:24.010 回答
-2

使用更多变量执行此操作:

  aaa <- "
      SELECT   ColOne, ColTwo 

FROM    TheTable 

 WHERE  HpId =  AAAA            and

  VariableId = BBBB     and 

  convert (date,date )  < 'CCCC'
  "


--------------------------

  aaa <- gsub ("AAAA",  toString(111),aaa)

  aaa <- gsub ("BBBB",  toString(2222),aaa)

  aaa <- gsub ("CCCC",  toString (2016-01-01) ,aaa)
于 2016-02-08T21:06:03.453 回答