0

在使用日期时间字段更新 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 转换。

4

1 回答 1

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

于 2013-08-21T20:21:54.497 回答