我有一个从csv文件中获取的数据帧,其中包含带有日期的几列。日期的格式为12/05/2019
或2019-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] [用于SQL的ODBC驱动程序17 服务器]用于转换说明的字符值无效
我已经确认,导致此错误的唯一列是日期列,它们都是导致此错误的列。我试过将日期转换为字符串,使用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文件中导入了日期列,所以我无法弄清错误是什么。
答案 0 :(得分:0)
这是由于未将任何转换实际保存到数据框而引起的。如果您看到上面的代码,它将显示以下内容:
org.jvnet.hudson.plugins.nextbuildnumber.NextBuildNumberAction.doSubmit(NextBuildNumberAction.java:96)
Caused: javax.servlet.ServletException: Build number must be an integer
相反,应该是 this :
transform(DataframeName,
First_Date = dmy(First_Date)
在控制台中正在运行的块下显示转换结果,即使它没有覆盖任何内容,也可能在这里欺骗您。关于该值是否再次转换后似乎会还原的评论是一个大提示。
别忘了仔细检查简单的事情。