【问题标题】:Can't insert date column from dataframe into date column in SQL Server无法将数据框中的日期列插入 SQL Server 中的日期列
【发布时间】:2019-09-25 10:47:52
【问题描述】:

我有一个从 csv 文件中获取的数据框,该文件包含几个带有日期的列。日期的格式为12/05/20192019-08-15T00:00:00Z,具体取决于列。

我已使用以下代码清理了列:

transform(DataframeName,
     First_Date = dmy(First_Date)
     Second_Date = ymd_hms(Second_Date))

这成功地将所有日期转换为YYYY-MM-DD 格式。

我正在尝试使用以下命令将此数据框导入 SQL 数据库:

dbWriteTable(con, "DatabaseTable", DataframeName, append = TRUE)

每当我这样做时,我都会收到以下错误:

result_insert_dataframe(rs@ptr, values) 中的错误: nanodbc/nanodbc.cpp:1587:22018:[Microsoft][ODBC Driver 17 for SQL 服务器]强制转换规范的字符值无效

我已确认导致此错误的唯一列是日期列,它们都是导致此错误的原因。我尝试将日期转换为字符串,将字符串转换回不同的日期,使用as.Date,导入数字,将空值转换为NA,但没有任何效果。当我尝试再次转换列(尝试使其成为字符串文字)时,它会恢复为原始值。例如:

原始值:12/05/2019

transform(DataframeName,
     First_Date = dmy(First_Date)

下一个值:2019-05-12

sqlData(con, DataframeName, row.names = NA

最后一个值:12/05/2019

就好像它从一开始就没有真正转变过一样。

我之前只使用 as.Date 从非常相似的 csv 文件中导入了日期列,所以我无法弄清楚错误是什么。

【问题讨论】:

    标签: r sql-server date lubridate


    【解决方案1】:

    这是由于实际上没有将任何转换保存到数据帧。如果您看到上面的代码,它会显示:

    transform(DataframeName,
        First_Date = dmy(First_Date)
    

    什么时候应该是 this:

    DataframeName <- transform(DataframeName,
        First_Date = dmy(First_Date)
    

    显示在控制台中正在运行的块下的转换结果可能会在此处欺骗您,即使它没有覆盖任何内容。如果再次转换该值似乎会恢复的评论是一个很大的线索。

    不要忘记仔细检查简单的事情。

    【讨论】:

      猜你喜欢
      • 2018-03-10
      • 2019-02-15
      • 2021-05-29
      • 2014-03-11
      • 2015-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多