我使用DBI推来自R数据帧到一个SQL Server表。在表中,各列中的一个是DATE类型。我遇到的问题是,当任何在R数据帧中的日期值的缺失(NA),I得到一个错误。
这里是我的代码:
## Basic function to connect to the SQL Server database
con <- dbConnect()
## Create a table in the database
dbSendQuery(con,
'CREATE TABLE "my_table" (
my_id VARCHAR(50),
my_date DATE DEFAULT NULL
);'
)
## Create some data
df <- data.frame(
"my_id" = c(10001, 10002, 10003),
"my_date" = c(Sys.Date(), NA, Sys.Date())
)
## Push the data to the database
dbWriteTable(con, name = "my_table", value = df, append = TRUE, row.names = F)
当我运行它,我得到以下错误:
Error in result_insert_dataframe(rs@ptr, values) :
nanodbc/nanodbc.cpp:1587: 22018: [Microsoft][ODBC Driver 17 for SQL Server]Invalid character value for cast specification
我知道这个问题是因为在df
的一种Na日期值的,但我的数据的现实情况是,一些记录将有效日期值,而其他人将丢失。而且由于R不允许数据帧中的NULL值,我不能设置缺少的日期为NULL。我如何能解决这个得到任何想法?
谢谢!
写入到数据库之前,不要创建表,函数dbWriteTable()
将创建表。我认为它可以解决这个问题。
## Basic function to connect to the SQL Server database
con <- dbConnect()
## Create some data
df <- data.frame(
"my_id" = c(10001, 10002, 10003),
"my_date" = c(Sys.Date(), NA, Sys.Date())
)
## Push the data to the database
dbWriteTable(con, name = "my_table", value = df, append = TRUE, row.names = F)