0

我在 R 中优化 SQL 查询时遇到问题。我正在查询 Microsoft Access 数据库。我不确定这是 SQL 问题还是 R 问题。我使用 RODBC 建立连接,然后我试图通过从 2000-1-1 开始获取结果来限制查询。

当我查询整个字段时,我使用 str() 来确定确切的日期类型,以便创建一个比较变量。所以,我得到了类似的东西

wholeqry <- sqlQuery(channel, 
               paste("select DATE, OTHERFIELD from DB", sep=""))
(testdate <- wholeqry[1,1])
str(testdate)

这将返回:

"1984-11-29 EST"
POSIXct[1:1], format: "1984-11-29"

好的,所以我格式化了一个变量,以便可以将其与此进行比较:

start <- as.POSIXct(strptime("2000-01-01", format="%Y-%m-%d"), tz = "EST")

然后我检查它们是否确实与逻辑运算符相当:

testdate < start
start < testdate

结果和预期的一样:

TRUE
FALSE

好的,现在我觉得我已经准备好进行查询了。我使用 paste() 将 start 作为 sql 语句中的变量传递:

qry <- sqlQuery(channel, 
               paste("select DATE, OTHERFIELD from DB where DATE >=", start, sep=""))

但是,当我检查 qry 时,它是整个字段减去两个条目。对我来说真正令人困惑的部分是,如果我在我的新 qry 中检查相同的条目,我会得到相同的日期,并且可以将它与我的开始变量进行比较,并且仍然得到正确的逻辑结果。那是:

(testdate <- qry[1,1])
testdate < start
start < testdate

给出结果:

"1984-11-29 EST"
TRUE
FALSE

因此,虽然有两条记录被比较踢出,但其余的则没有,即使我手动比较它们,它们也应该被拒绝。我认为日期字段的格式可能不统一,因为某些条目的时区 EDT 而不是 EST,但是如果我根据开始日期检查这些条目,我仍然会得到正确的逻辑结果。

4

1 回答 1

2

我刚刚遇到这个问题并通过以下方式解决了它。访问要求日期用“#”符号括起来。以下查询应该有效:

qry <- sqlQuery(channel, "select DATE, OTHERFIELD from DB where DATE >= #2000-01-01#")
于 2015-03-18T14:35:48.457 回答