sqldf的问题:无法在日期选择

时间:2015-09-04 07:01:02

标签: r sqldf

问题与此类似(R, issue with sqldf: cannot make condition on date)  但是有不同的错误术语:

假设我有一张桌子:

OrderDate  Sales
2005-02-28  12
2005-02-28  234
...

在原始的R DataFrame中,OrderDate的数据类型是double(在as.Date命令之后)

我想做select * from table where OrderDate='2005-02-28'之类的事情,但遇到错误:

  

错误:" sqldf中的意外数字常量('从表中选择*,其中OrderDate =' 2005"

我在列出的问题和其他问题上尝试了一些解决方案,但仍然无法解决。

我觉得OrderDate的数据类型有问题,但并不完全清楚。即当我找到日期的数值并进入我的状态时,会遇到这样的错误(x是相应的数值):

  

.verify.JDBC.result中的错误(r,"无法检索JDBC结果集   for",:无法检索select * from的JDBC结果集   表,其中OrderDate = x order by Qty desc limit 3(无法解析" DATE"   常数" x&#34 ;; SQL语句:从表中选择*,其中OrderDate = x   按数量排序限制3 [22007-175])

1 个答案:

答案 0 :(得分:3)

与R一样,

sqldf将日期存储为1970-01-01以来的天数;有关更多详细信息,请参阅this post中的常见问题解答4。

这将有效:

df <- read.table(header=TRUE, text="OrderDate  Sales
2005-02-28  12
2005-02-28  234
2005-03-01  567
2005-03-03  890")
df$OrderDate <- as.Date(df$OrderDate)

library(sqldf)
sqldf(sprintf("select * from df where OrderDate=%i",as.Date("2005-02-28")))
#    OrderDate Sales
# 1 2005-02-28    12
# 2 2005-02-28   234

还有:

start <- as.Date("2005-02-28")
end   <- as.Date("2005-03-01")
sqldf(sprintf("select * from df where OrderDate between %i and %i",start,end))
#    OrderDate Sales
# 1 2005-02-28    12
# 2 2005-02-28   234
# 3 2005-03-01   567

请注意%i的使用,以便将参数解释为整数(您也可以使用%d)。