从R studio向SQLite数据库添加值时如何指定日期格式?

问题描述 投票:0回答:1

当我尝试将日期格式的值从R studio插入SQLite数据库时,出现了问题。

值得注意的是,我将dbf文件加载到R studio中,然后将数据从dbf文件中整理到SQLite数据库中。

这是我使用的代码。有两个循环读取指定工作目录中的所有dbf文件。

library(sqldf)
library(DBI)
library(foreign)
library("RSQLite")

setwd("F:~/Data")
con <- dbConnect(RSQLite::SQLite(), dbname = "bbbb.db")
for(path in c("F:~/data1"
          "F:~/data2")){

setwd(path)
ldf <- list() # creates a list
  listdbf <- dir(pattern = "*.DBF")
for (k in 1:length(listdbf)){
    ldf[[k]] <- read.dbf(listdbf[k])
     }
df1 <- ldf[[1]]
df2 <- ldf[[2]]
data1 <- sqldf("select a.date, a.REGN as regn, 
               sum(case when b.C1='000' then b.C3 else 0 end) as tot_cap,
               from df1 a
               inner join df2 b on (a.regn = b.regn)
               group by a.regn, a.dt
               order by a.regn")
dbWriteTable(con, name="capital", value=data1,  append= TRUE)
}       

因此,SQLite数据库中日期变量的格式为“ 18140”,而不是“ 2019-10-01”。

我试图通过代码在R studio中的df1表中更改日期格式

df1$date <- as.Date(as.POSIXct(df1$DT, format='%d.%m.YY'))

而且这只是我尝试更改日期格式的许多其他版本中的一个代码。

但是我失败了。

是否有处理此问题的想法?

提前感谢。

r sqlite date-format
1个回答
0
投票

SQLite可以存储的类型数量有限,并且不包含日期类型。因此,当您将R Date对象存储到数据库中时,您将获得基础数值“从1970-01-01开始的天数”。

当您从数据库中读取值时,您需要告诉R它们实际上是日期。使用代码

as.Date(18140, origin = "1970-01-01")

将数值转换回日期。 (如果使用zoo包,则不需要origin参数,但是如果要从as.Date中获取base,则需要。)

格式是另一个问题:显示值或从字符串转换时使用它。从内部数值开始时,无需指定它。

© www.soinside.com 2019 - 2024. All rights reserved.