我在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,但如果我根据开始日期检查这些条目,我仍然会得到正确的逻辑结果。
答案 0 :(得分:1)
我刚遇到这个问题,并通过以下方式解决了这个问题。访问要求日期被&#39;#&#39;包围。符号。以下查询应该有效:
qry <- sqlQuery(channel, "select DATE, OTHERFIELD from DB where DATE >= #2000-01-01#")