R:POSIXct与datetime绑定时的精度损失(sql server)

时间:2013-08-21 20:16:40

标签: r rodbc posixct

当使用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转换。

1 个答案:

答案 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没问题。