gpt4 book ai didi

sql - 当结果集很大时,RODBC 会丢失日期时间的时间值

转载 作者:行者123 更新时间:2023-12-04 00:52:24 26 4
gpt4 key购买 nike

所以这很奇怪。如果结果集足够大,RODBC 似乎会删除 DateTime SQL 列的时间部分。 (查询是针对 SQL Server 2012 机器运行的,是的,当我在 SQL Server 端运行它们时,无论返回多少行,它们都会产生相同且正确的结果。)

例如,以下工作完美:

myconn <- odbcConnect(dsnName, uid, pwd)
results <- sqlQuery(myconn, "SELECT TOP 100 MyID, MyDateTimeColumn from MyTable ORDER BY MyDateTimeColumn DESC")
close(myconn)

在 R 中,以下内容按预期工作:
> results$MyDateTimeColumn[3]
[1] "2013-07-01 00:01:22 PDT"

这是一个有效的 POSIXct日期时间。但是,当返回 10,000 到 100,000 行之间的某处时,时间部分突然消失了:
myconn <- odbcConnect(dsnName, uid, pwd)
bigResults <- sqlQuery(myconn, "SELECT TOP 100000 MyID, MyDateTimeColumn from MyTable ORDER BY MyDateTimeColumn DESC")
close(myconn)

(相同的代码,只是返回了更多的行; 注意 :完全相同的行现在已经失去了它的时间分量),R 响应:
> bigResults$MyDateTimeColumn[3]
[1] "2013-07-01 PDT"

请注意,现在缺少时间(这不是不同的行;它是 与之前完全相同的行 ),如下所示:
>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

显然,解决方法是增量查询附加或导出到 CSV 并导入到 R,但这似乎很奇怪。有没有人见过这样的事情?

配置:我使用的是最新版本的 RODBC (1.3-10),并且可以在 Windows x64 上运行的 R 安装和在 Mac OS X 10.9 (Mavericks) 上运行的 R 安装上复制行为。

编辑 #2 添加 dput() 的输出根据请求比较对象:
> 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 = "")

由于查询返回的行数,底层数据实际上正在发生变化,这非常奇怪。

最佳答案

sqlQuery()有一个名为 as.is 的选项.将此设置为 TRUE将提取所有内容,例如 Microsoft SQL Management Studio。

关于sql - 当结果集很大时,RODBC 会丢失日期时间的时间值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22899516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com