很快,我正在使用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)
问题是Xlat
和Xlon
是R中的变量,它们的值经常变化,因此我无法将它们硬通过查询。显然,Z.LAT
和Z.LON
对应GRID
表。
问题是:是否可以将R变量用于查询?
我还想知道是否有=
代替最近或最接近的值。
感谢任何建议。感谢
修改:另一种解决方法是从我的桌面SELECT *
开始,然后播放&#39;使用fun
以获取我的值。对此有何想法或做法?
注意: jdbcConnection
要求远程连接。
答案 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)