首页 > 解决方案 > dbReadTable 将日期列从 SQL 数据库强制转换为字符

问题描述

我可以将日期写入 SQL 表,DBI::dbWriteTable()并查看该列实际上已格式化为数据库上的日期。但是当我使用DBI::dbReadTable()相同的日期列时,它会被强制转换为 R 中的字符列。

如何将 SQL 表读入 R 并保留日期列格式?

library(DBI)

df <- data.frame(date = as.Date("2012-01-01"))
class(df$date)
#> [1] "Date"

udt <- dbConnect(odbc::odbc(), "udt")
dbWriteTable(udt, name = Id(schema = "FarmingAnalytics", table = "test"), value = df, overwrite = TRUE)

df2 <- dbReadTable(udt, name = Id(schema = "FarmingAnalytics", table = "test")) 
class(df2$date)
#> [1] "character"

reprex 包于 2020-01-20 创建(v0.3.0)

标签: sqlrdate

解决方案


这对我有用

df2$date <- as.Date(df2$date)

更一般地说

datecols <- dbGetQuery(udt, "SELECT  COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS 
                WHERE UPPER(TABLE_SCHEMA)='FARMINGANALYTICS' AND 
                UPPER(TABLE_NAME)='TEST' AND DATA_TYPE='date'" )
for (col in datecols$COLUMN_NAME){
  df2[[col]]<- as.Date(df2[[col]])
}

推荐阅读