s中查询中的日期条件,R中

时间:2013-10-22 14:25:37

标签: sql r

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

1 个答案:

答案 0 :(得分:1)

我刚遇到这个问题,并通过以下方式解决了这个问题。访问要求日期被&#39;#&#39;包围。符号。以下查询应该有效:

qry <- sqlQuery(channel, "select DATE, OTHERFIELD from DB where DATE >= #2000-01-01#")