dbReadTable 将日期列从 SQL 数据库强制转换为字符

Posted

技术标签:

【中文标题】dbReadTable 将日期列从 SQL 数据库强制转换为字符【英文标题】:dbReadTable coercing date column from SQL database to character 【发布时间】:2020-05-06 19:41:28 【问题描述】:

我可以使用DBI::dbWriteTable() 将日期写入SQL 表,并看到该列实际上已格式化为数据库中的日期。但是当我使用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 package (v0.3.0) 于 2020-01-20 创建

【问题讨论】:

【参考方案1】:

这对我有用

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]])

【讨论】:

以上是关于dbReadTable 将日期列从 SQL 数据库强制转换为字符的主要内容,如果未能解决你的问题,请参考以下文章

将列从日期转换为日期时间

如何在 Amazon Redshift 中将列从字符串更改为日期?

将新列从另一个表连接到 redshift/sql 表

PostgreSQL,试图将日期列从 csv 文件复制到表的列

Pandas - 将日期列从 dd/mm/yy hh:mm:ss 转换为 yyyy-mm-dd hh:mm:ss

使用 dbReadTable in_schema