将R变量用于SQL查询

时间:2014-05-09 10:22:23

标签: sql r oracle jdbc

很快,我正在使用JDBC,我正在尝试编写一个将从SQL开发人员db表中返回一些值的查询。

到目前为止我有这个:

#Query for getting data
sql <- paste("select * 
           FROM GRID Z
           where Z.LAT = Xlat AND Z.LON = Xlon")
fun <- dbGetQuery(jdbcConnection, sql)
attach(fun)

问题是XlatXlon是R中的变量,它们的值经常变化,因此我无法将它们硬通过查询。显然,Z.LATZ.LON对应GRID表。

问题是:是否可以将R变量用于查询?

我还想知道是否有=代替最近或最接近的值。

感谢任何建议。感谢

修改:另一种解决方法是从我的桌面SELECT *开始,然后播放&#39;使用fun以获取我的值。对此有何想法或做法?

注意: jdbcConnection要求远程连接。

4 个答案:

答案 0 :(得分:2)

你在找这个吗?

sql <- paste0("select * 
           FROM GRID Z
           where Z.LAT ='", Xlat,"' AND Z.LON = '", Xlon,"'")

我假设你的变量是字符。如果以上是在Web服务器后面运行,则可以选择URL编码和转义以避免代码注入...例如this

编辑:关于此:

I would also like to know if instead of = is there something to match the closest or nearest values.

由于您通过SQL引擎执行查询,这更像是SQL问题而不是R问题。就像@Vivek说你可以在sqldf中做到这一点,但我猜你的数据是在远程数据库中,所以在这种情况下它不会有帮助。

所有SQL版本都有like,因此只需在查询中使用它。请告诉我,我是否误解了你的问题。

sql <- paste0("select * 
           FROM GRID Z
           where Z.LAT like '", Xlat,"' AND Z.LON like '", Xlon,"'")

答案 1 :(得分:1)

是的,当然可以看到库sqldf。您可以使用近似匹配Z.LAT like 'Xlat'

data(CO2)

var1<-"Plant"
var2<-"conc"

require(sqldf)
squery2<-paste("select * from CO2 where",var1,"like 'Qn%'","and",var2,"> 500",sep=" ")

> sqldf(squery2)
  Plant   Type  Treatment conc uptake
1   Qn1 Quebec nonchilled  675   39.2
2   Qn1 Quebec nonchilled 1000   39.7
3   Qn2 Quebec nonchilled  675   41.4
4   Qn2 Quebec nonchilled 1000   44.3
5   Qn3 Quebec nonchilled  675   43.9
6   Qn3 Quebec nonchilled 1000   45.5

答案 2 :(得分:1)

gsubfn&#39; fn$运算符支持一种准perl类型的字符串插值,如下所示:

library(gsubfn)

sql0 <- "select * FROM GRID Z where Z.LAT = $Xlat AND Z.LON = $Xlon"
fun <- fn$dbGetQuery(jdbcConnection, sql0)

或者像这样允许在替换后检查sql

sql0 <- "select * FROM GRID Z where Z.LAT = $Xlat AND Z.LON = $Xlon"
sql <- fn$identity(sql0)
fun <- dbGetQuery(jdbcConnection, sql)

请参阅?fn以及sqldf home page上的示例。

答案 3 :(得分:-1)

你也可以用这个 - 假设,

 Xlat <- 8
 Xlon <- 10

然后,

 #Query for getting data
 sql <- paste("select * 
       FROM GRID Z
       where Z.LAT = $Xlat AND Z.LON = $Xlon")
 fun <- dbGetQuery(jdbcConnection, sql)
 attach(fun)