我在 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,但是如果我根据开始日期检查这些条目,我仍然会得到正确的逻辑结果。