我正在使用DBI将数据帧从R推送到SQL Server表中。在表中,列之一是DATE类型。我遇到的问题是,当R数据框中的任何日期值丢失(NA)时,都会出现错误。
这是我的代码:
## 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。关于如何解决这个问题有任何想法吗?
谢谢!
答案 0 :(得分:1)
不创建写入之前该表到数据库中,该函数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)