来自R推日期值SQL Server表缺失值

问题描述 投票:0回答:1

我使用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。我如何能解决这个得到任何想法?

谢谢!

sql r sql-server
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.