Vì vậy, đây là VERY lạ. RODBC dường như giảm phần thời gian của các cột SQL DateTime nếu tập kết quả đủ lớn. (Các truy vấn đang chạy trên máy SQL Server 2012 và, có, khi tôi chạy chúng ở phía máy chủ SQL, chúng tạo ra kết quả giống hệt nhau và phù hợp, bất kể số hàng được trả về.)RODBC mất giá trị thời gian của datetime khi tập hợp kết quả lớn
Ví dụ: hoạt động hoàn hảo:
myconn <- odbcConnect(dsnName, uid, pwd)
results <- sqlQuery(myconn, "SELECT TOP 100 MyID, MyDateTimeColumn from MyTable ORDER BY MyDateTimeColumn DESC")
close(myconn)
Trong R, các công việc sau như mong đợi:
> results$MyDateTimeColumn[3]
[1] "2013-07-01 00:01:22 PDT"
đó là một thời gian POSIXct
ngày hợp lệ. Tuy nhiên, khi ở đâu đó giữa 10.000 và 100.000 hàng được trả về, đột nhiên phần thời gian biến mất:
myconn <- odbcConnect(dsnName, uid, pwd)
bigResults <- sqlQuery(myconn, "SELECT TOP 100000 MyID, MyDateTimeColumn from MyTable ORDER BY MyDateTimeColumn DESC")
close(myconn)
(cùng một mã, chỉ cần một số lượng lớn hàng trả lại; LƯU Ý: các chính xác cùng hàng giờ đây đã bị mất thành phần thời gian của mình), R đáp ứng:
> bigResults$MyDateTimeColumn[3]
[1] "2013-07-01 PDT"
Lưu ý rằng thời gian tại là thiếu (đây không phải là một dãy ghế khác; đó là chính xác cùng hàng như previo chúng ta), như các chương trình sau:
>strptime(results$TriggerTime[3], "%Y-%m-%d %H:%M:%S")
[1] "2013-07-01 00:01:22"
>strptime(bigResults$TriggerTime[3], "%Y-%m-%d %H:%M:%S")
[1] NA
Rõ ràng công việc xung quanh hoặc là gia tăng truy vấn-với-append hoặc xuất khẩu sang CSV-and-nhập-to-R, nhưng điều này có vẻ rất kỳ quặc. Bất cứ ai từng thấy bất cứ điều gì như thế này?
Cấu hình: Tôi đang sử dụng phiên bản RODBC mới nhất (1.3-10) và có thể sao chép hành vi trên cả bản cài đặt R chạy trên Windows x64 và cài đặt R chạy trên Mac OS X 10.9 (Mavericks).
EDIT # 2 Thêm đầu ra của dput()
để so sánh các đối tượng, theo yêu cầu:
> dput(results[1:10,]$MyDateTimeColumn)
structure(c(1396909903.347, 1396909894.587, 1396909430.903, 1396907996.9, 1396907590.02, 1396906077.887, 1396906071.99, 1396905537.36, 1396905531.413, 1396905231.787), class = c("POSIXct", "POSIXt"), tzone = "")
> dput(bigResults[1:10,]$MyDateTimeColumn)
structure(c(1396854000, 1396854000, 1396854000, 1396854000, 1396854000, 1396854000, 1396854000, 1396854000, 1396854000, 1396854000), class = c("POSIXct", "POSIXt"), tzone = "")
Nó sẽ xuất hiện mà các dữ liệu cơ bản được thực sự thay đổi như là kết quả của số hàng trả lại do truy vấn, đó là hết sức kỳ lạ.
có lẽ thử [RJDBC] (http://cran.r-project.org/web/packages/RJDBC/index.html)? –
Trong trường hợp đó là rõ ràng đối với người khác, " không có thời gian "dấu thời gian bắt đầu trong ngày cho múi giờ +0700 GMT. Vậy, là db ở Campuchia, Indonesia, Thái Lan, Việt Nam (hoặc có thể là một số người khác)? db phụ trợ thực sự lưu trữ thông tin này như thế nào (số nguyên so với float so với chuỗi), là thời gian một phần riêng biệt từ thông tin ngày nội bộ ? Bởi vì nếu không thì db phải làm _more_ để làm việc này, điều này là ** người lạ **. Hoặc có lẽ chỉ loại trả về là khác nhau? –
bất kỳ câu trả lời cho điều này xin vui lòng? cùng một vấn đề ở đây. trường được lưu trữ dưới dạng datetime trong SQL và RODBC lưu trữ nó dưới dạng posixct nhưng loại bỏ dấu thời [email protected] JoshuaUlrich tôi không thể sử dụng RJDBC cho trường hợp của tôi vì nó lưu trữ trường dưới dạng ký tự và nó làm cho việc phân loại theo trường này chậm hơn rất nhiều. tôi cũng có rất nhiều dữ liệu và quá trình chuyển đổi cũng mất quá nhiều thời gian. bất kỳ ý tưởng xin vui lòng? cảm ơn bạn! – charliealpha