는 날짜 필드에 SQL Server 테이블을 업데이트하는 작업을 할 때, 나는 다음과 같은 관찰했다하십시오R : 정밀도의 손실 날짜와 바인딩 POSIXct (SQL 서버)
> 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 서버에 저장된 원래의 것과 약간 상이한 $ DT는 (R 처리 후) SQL 서버로부터 판독 mybus에 기인 것을 나타낸다 따라서 일치 항목을 찾을 수 없기 때문에 sqlUpdate 작업이 실패했습니다. 나 또한 datetime2 시도했지만 쓸모가 없습니다.
나의 현재 해결 방법은 SQL 서버 측에서 문자로 날짜를 변환하는 것입니다 :
sqlstmt <- 'select convert(nvarchar(24), Dt, 21) as Dt, value from mybus;'
는 R POSIXct 변환을 우회 할 수 있습니다.
이것은 알려진 부동 소수점 정밀도 문제입니다. 또한'z'는'POSIXct'가 아니라'POSIXlt' 객체입니다. 'POSIXct'로 변환하면 아무런 문제가 없습니다. –