使用 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 使得使用参数化查询变得非常容易,您可以在查询代码中放置参数的位置放置?。由于您的btimeetime 已经采用适合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的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中使用 RODBC 创建循环 SQL QUERY

使用 R RODBC 参数化 SQL 查询

以编程方式构建 SQL 查询 R/Shiny/RODBC

将 R 变量传递给 RODBC sql 查询? [复制]

将R变量传递给具有多个条目的RODBC sql查询?

使用 RODBC 和 MS SQL Server 的长时间运行查询超时