使用 rodbc 包从 R 查询 sql server。需要将日期/时间值作为 where 语句的一部分传递到 sqlQuery
Posted
技术标签:
【中文标题】使用 rodbc 包从 R 查询 sql server。需要将日期/时间值作为 where 语句的一部分传递到 sqlQuery【英文标题】:Using rodbc package to query sql server from R. Need to pass in date/time value into sqlQuery as part of where statement 【发布时间】:2016-10-20 18:20:21 【问题描述】:使用 rodbc 包从 R 查询 sql server。需要将日期/时间值作为 where 语句的一部分传入 sqlQuery
btime <- "2016-10-17 18:00:00"
etime <- "2016-10-17 19:00:00"
sqlQuery(cn, "select * from [blah].[blah] where metric = 'name' and date_time >= Convert(datetime, **btime**) and date_time <= Convert(datetime, **etime**)")
【问题讨论】:
【参考方案1】:我为此推荐RODBCext
包:
library(RODBCext)
sqlQuery(cn,
"select * from [blah].[blah] where metric = ? and date_time >= ? and date_time <= ?",
data = list("name",
btime,
etime),
fetch = TRUE,
stringsAsFactors = FALSE)
RODBCext
使得使用参数化查询变得非常容易,您可以在查询代码中放置参数的位置放置?
。由于您的btime
和etime
已经采用适合SQL 的格式,您可以将它们作为字符串传递。我还在查询中设置了'name'
一个参数,以避免在查询中使用引号(详见https://cran.r-project.org/web/packages/RODBCext/vignettes/Parameterized_SQL_queries.html)。
sqlExecute
是一种非常方便的方式,可以让您摆脱工作字符串进入查询。
【讨论】:
那么是不是有点像sprintf.SQL
,不就是有这样的功能吗?我看到你间接引用了 Little Bobby Tables 模因。 xkcd.com/327
library(RODBC) cn
但这不是:
library(RODBCext) cn
使用sqlExecute
而不是sqlQuery
。此外,在您的工作示例中,您有CounterName =
,但在您失败的示例中,您有metric =
以上是关于使用 rodbc 包从 R 查询 sql server。需要将日期/时间值作为 where 语句的一部分传递到 sqlQuery的主要内容,如果未能解决你的问题,请参考以下文章