簡體   English   中英

如何使用 DBI/dbplyr 將表寫入數據庫並保留日期字段?

[英]How do you write a table to DB using DBI/dbplyr and preserve date field?

當我使用{DBI}{dbplyr}將包含日期類型字段的表寫入數據庫時,該字段被強制為字符。 如何讓它作為日期類型寫入 SQL 服務器數據庫表?

library(DBI)
library(odbc)
library(dbplyr)

con.write <- dbConnect(drv = odbc(),
                       Driver = "SQL Server",
                       Server = "MYSERVER",
                       Database = "MYDATABASE")

cars <- mtcars %>%
  mutate(AsOfDate = as.Date('2022-01-24'))

查看日期字段的 class:

> class(cars$AsOfDate)
[1] "Date"

現在寫入數據庫並從數據庫中重新讀取。

dbWriteTable(con.write, name = "tmp_mtcars",
             value = cars, row.names = TRUE)

dbcars <- tbl(con.write, "tmp_mtcars") %>% collect()

觀察我們剛剛寫入數據庫的字段的class:

> class(dbcars$AsOfDate)
[1] "character"

一種解決方法是使用as.POSIXct而不是as.Date

cars <- mtcars %>%
  mutate(AsOfDate = as.POSIXct('2022-01-24'))

dbWriteTable(con.write, name = "tmp_mtcars",
             value = cars, row.names = TRUE)

dbcars <- tbl(con.write, "tmp_mtcars") %>% collect()

> class(dbcars$AsOfDate)
[1] "POSIXct" "POSIXt" 

我不確定使用as.Dateas.POSIXct的功能效果是什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM