【问题标题】:Using rodbc package to query sql server from R. Need to pass in date/time value into sqlQuery as part of where statement使用 rodbc 包从 R 查询 sql server。需要将日期/时间值作为 where 语句的一部分传递到 sqlQuery
【发布时间】: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**)")

【问题讨论】:

    标签: sql-server r


    【解决方案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 =
    猜你喜欢
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    相关资源
    最近更新 更多