当使用datetime字段更新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但是没有用。
我目前的解决方法是将datetime转换为sql server端的字符:
sqlstmt <- 'select convert(nvarchar(24), Dt, 21) as Dt, value from mybus;'
绕过R POSIXct转换。
答案 0 :(得分:1)
你的操作系统是什么?
R> z <- strptime("20/2/06 11:16:16.683", "%d/%m/%y %H:%M:%OS")
R> z
[1] "2006-02-20 11:16:16.683"
R>
使用Ubuntu没问题。