在使用日期时间字段更新 sql server 表时,我有以下观察结果:
> options(digits.secs = 3)
> z <- strptime("20/2/06 11:16:16.68", "%d/%m/%y %H:%M:%OS")
> z
[1] "2006-02-20 11:16:16.67"
> z <- strptime("20/2/06 11:16:16.683", "%d/%m/%y %H:%M:%OS")
> z
[1] "2006-02-20 11:16:16.682"
我们可以看到在 POSIXct 方面存在精度损失。
有人有类似的经历吗?如果可以确认,我认为这是一个错误...谢谢!
编辑
非常感谢,因为许多人指出以前曾问过类似的问题。它实际上来自一个 RODBC 问题……很高兴我找到了解决方案。
require(RODBC)
ch <- odbcConnect('mydb')
/* mybus (Dt datetime, value float) */
sqlstmt <- 'select * from mybus;'
mybus <- sqlQuery(ch, sqlstmt)
mybus$value <- mybus$value + 1
sqlUpdate(ch, mybus, index='Dt', verbose=T)
close(ch)
**[RODBC] Failed exec in Update**
我的挖掘表明该错误是由于从 sql server 读取的 mybus$Dt (经过 R 处理)与存储在 sql server 中的原始文件略有不同;因此,sqlUpdate 操作失败——因为他们找不到匹配项。我也试过 datetime2 但没有用。
我目前的解决方法是将日期时间转换为 sql server 端的字符:
sqlstmt <- 'select convert(nvarchar(24), Dt, 21) as Dt, value from mybus;'
绕过 R POSIXct 转换。