将字符作为参数传递给 R 中的 db 函数
Passing characters as argument into db function in R
我想知道如何在我下面的 R user-defined function
中传递 2 字符 (x,y)
,希望有人可以提供帮助:
sql.r<-function(x,y){
# Load RODBC package
library(RODBC)
# Create a connection to the database called "con"
con <- odbcConnect("odbccalc", uid=xxx, pwd=xxx, believeNRows=FALSE)
# Check that connection is working (Optional)
odbcGetInfo(con)
# Find out what tables are available (Optional)
Tables <- sqlTables(con, schema="tblData")
# Query the database and put the results into the data frame "dataframe"
dataframe <- sqlQuery(con, "
SELECT lbl,Date, dot
FROM
tblData t
WHERE t.lbl="'',x,"''
AND t.Date <"'',y,"''
ORDER BY t.Date desc")
语法问题可能出在quotes
的管理上。
工作语法,以防有帮助:
sqlQuery(con, "
SELECT lbl,Date, dot
FROM
tblData t
WHERE t.lbl='fruit'
AND t.Date < '2015-06-01'
ORDER BY t.Date desc")
最佳,
您必须通过 paste
或 paste0
构建查询。试试这个:
dataframe <- sqlQuery(con, paste0("
SELECT lbl,Date, dot
FROM
tblData t
WHERE t.lbl='",x,"'
AND t.Date <'",y,"'
ORDER BY t.Date desc"))
重点是 sqlQuery
有两个参数:一个 connection
和一个字符串。该字符串是您要执行的 sql
命令。如果命令依赖于某些输入,则必须相应地构建字符串。 paste
和 sprintf
让你做到这一点。您将 x
和 y
变量的值放在表示命令的字符串中。这不是 sql 特定的,只是标准的字符串操作。
正如其他人所说,您可以使用 paste
或 paste0
来构造查询。但是,sprintf
函数也可以解决这个问题。我认为这稍微更容易阅读,因为您避免使用混合的单引号和双引号。
即在您的函数中执行类似以下操作:
query <- sprintf("SELECT lbl, Date, dot
FROM
tblData t
WHERE t.lbl= '%s'
AND t.Date < '%s'
ORDER BY t.Date desc", x, y)
sqlQuery(con, query)
我想知道如何在我下面的 R user-defined function
中传递 2 字符 (x,y)
,希望有人可以提供帮助:
sql.r<-function(x,y){
# Load RODBC package
library(RODBC)
# Create a connection to the database called "con"
con <- odbcConnect("odbccalc", uid=xxx, pwd=xxx, believeNRows=FALSE)
# Check that connection is working (Optional)
odbcGetInfo(con)
# Find out what tables are available (Optional)
Tables <- sqlTables(con, schema="tblData")
# Query the database and put the results into the data frame "dataframe"
dataframe <- sqlQuery(con, "
SELECT lbl,Date, dot
FROM
tblData t
WHERE t.lbl="'',x,"''
AND t.Date <"'',y,"''
ORDER BY t.Date desc")
语法问题可能出在quotes
的管理上。
工作语法,以防有帮助:
sqlQuery(con, "
SELECT lbl,Date, dot
FROM
tblData t
WHERE t.lbl='fruit'
AND t.Date < '2015-06-01'
ORDER BY t.Date desc")
最佳,
您必须通过 paste
或 paste0
构建查询。试试这个:
dataframe <- sqlQuery(con, paste0("
SELECT lbl,Date, dot
FROM
tblData t
WHERE t.lbl='",x,"'
AND t.Date <'",y,"'
ORDER BY t.Date desc"))
重点是 sqlQuery
有两个参数:一个 connection
和一个字符串。该字符串是您要执行的 sql
命令。如果命令依赖于某些输入,则必须相应地构建字符串。 paste
和 sprintf
让你做到这一点。您将 x
和 y
变量的值放在表示命令的字符串中。这不是 sql 特定的,只是标准的字符串操作。
正如其他人所说,您可以使用 paste
或 paste0
来构造查询。但是,sprintf
函数也可以解决这个问题。我认为这稍微更容易阅读,因为您避免使用混合的单引号和双引号。
即在您的函数中执行类似以下操作:
query <- sprintf("SELECT lbl, Date, dot
FROM
tblData t
WHERE t.lbl= '%s'
AND t.Date < '%s'
ORDER BY t.Date desc", x, y)
sqlQuery(con, query)