将日期值从R推到缺少值的SQL Server表中

时间:2019-02-01 20:43:13

标签: sql r sql-server

我正在使用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。关于如何解决这个问题有任何想法吗?

谢谢!

1 个答案:

答案 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)