sql - 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)
解决方案
这对我有用
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]])
}
推荐阅读
- regex - 如何正确结合正则表达式并在 shell 脚本中查找
- reactjs - 超过最大更新深度反应
- apache-flink - 如何反序列化 Flink 中的外部检查点清单?
- python - 如何使用 Python 重新采样
- ruby-on-rails - current_user 在用户控制器的显示操作中为零
- sql - 外键作为复合主键的表的软删除实施失败
- kotlin - 使用 Kotlin 从字符串中的字符获取 unicode 值
- javascript - 当内部 div 为空时,如何隐藏 div?
- azure-devops - azure-devops-node-api:使用用户名和密码进行身份验证
- model - Committee Methods (ensemble learners) Best Model