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 中将列从字符串更改为日期?
PostgreSQL,试图将日期列从 csv 文件复制到表的列