RJDBC错误地读取来自数据库表bigintegers(RJDBC wrongly reading

2019-10-21 08:54发布

我检索包含从数据的基础上大整数成R(使用RJDBCs dbGetQuery方法)的柱。 为测试条件下,可以考虑以下号码

1000522010609612 
1000522010609613 
1000522010609614 
1000522010609615 
1000522010609616 
1000522010609617 
**971000522010609612 
1501000522010819466 
971000522010943717 
1501000522010733490**

[R似乎被错误地阅读内容。 其中,它是提供给我的R(后我使用RJDBC数据库中读取)的方法是:

1000522010609612
1000522010609613
1000522010609614
1000522010609615
1000522010609616
1000522010609617
**971000522010609664
1501000522010819584
971000522010943744
1501000522010733568**

看到最后4个数字。 他们错了! 这似乎是自动将数据转换成数据帧(这是很好的 - 但)有损坏的数字(bigints)。 关于我们如何当我们使用dbGetQuery使用RJDBC包特别解决上述问题的任何建议?

Answer 1:

您的数据读入作为浮点数:

DF <- read.table(text="1000522010609612 
1000522010609613 
1000522010609614 
1000522010609615 
1000522010609616 
1000522010609617 
971000522010609612 
1501000522010819466 
971000522010943717 
1501000522010733490")

class(DF[,1])
#[1] "numeric"
sprintf("%20f", DF[10, 1])
#[1] "1501000522010733568.000000"

你可以把它读作串并转换为大整数或直接作为大整数阅读:

library(bit64)

DF <- read.table(text="1000522010609612 
1000522010609613 
1000522010609614 
1000522010609615 
1000522010609616 
1000522010609617 
971000522010609612 
1501000522010819466 
971000522010943717 
1501000522010733490", colClasses = "integer64")

#                    V1
#1     1000522010609612
#2     1000522010609613
#3     1000522010609614
#4     1000522010609615
#5     1000522010609616
#6     1000522010609617
#7   971000522010609612
#8  1501000522010819466
#9   971000522010943717
#10 1501000522010733490

我不能帮你与你的数据库应用程序,但这应该为您解决问题的起点。



文章来源: RJDBC wrongly reading bigintegers from database table
标签: r bigint rjdbc