保留时间 使用 sqldf 进行类



我正在使用sqldf连接多个表,但是我在列上保留带有chron包的times类集时遇到问题。 我对sqldf函数使用了method="name__class"参数,并用类适当地命名了我的列,但我的times变量在使用sqldf进行选择后没有保留。

是否可以选择一个times类列并保留该类,或者我是否必须在SQL选择后重置类(这并不理想(。 我提供了一个玩具示例,展示了sqldf如何保留 Date 类,而不是times类:

library(chron)
mytime = data.frame(x=times(c("11:45:00", "12:15:00")))
mytime$y = as.Date(c("2019-09-01", "2019-09-11"))
mytime
x          y
1 11:45:00 2019-09-01
2 12:15:00 2019-09-11
class(mytime$x)
[1] "times"
class(mytime$y)
[1] "Date"

sqldf('select x as x__times, y as y__Date from mytime', method = "name__class")
x__times         y
1 0.4895833 2019-09-01
2 0.5104167 2019-09-11

提前感谢您的帮助。

sqldf

查找要转换为类Xas.X,但没有as.times因此它假定times不是类,x__times是您想要使用的实际名称。

要解决此问题,请定义as.times

as.times <- times

方法="自动">

此外,如果您添加as.times定义,那么,正如 @A. Suliman 在注释中指出的那样,在这种情况下您实际上不需要使用name__class,因为默认method="auto"已经自动将与输入列同名的任何输出列转换为该输入列的类。

相对湿度2

与SQLite不同,H2数据库确实支持日期和时间类,因此如果您使用H2数据库后端RH2,则无需定义as.times

library(RH2)
library(sqldf)
sqldf("select x, y from mytime")

如果你想回到SQLite,请确保RH2首先被分离,因为它会假设你想要它,如果它被加载,除非你根据?sqldf专门指定SQLite。

新发行

这已作为新问题 https://github.com/ggrothendieck/sqldf/issues/36 添加

最新更新