aaronwangnk 在R中通过ODBC从Oracle中提取数据时,如何控制到R中的数据类型仍然保持如同oracle中的类型呢。 我简单的提取之后,比如 sql <- "select * from table1" dt <- sqlQuery(conn, sql) 发现,很多字符型的都成了数值型了,并且很多数值型的都变成了0。这些数值型在苦中大都为0.×××。 这是怎么回事呢?如何才能正确的提取出来呢? 多谢了。
aaronwangnk 测试了以下发现,应该不是显示的问题吧。我把为零的数值拿出来在R中进行运算,结果都是0了。如果说全部的显示都为零了,那就不能使用了啊。难道是RODBC的bug,还是我哪里使用的不对?有了解的多指导啊。多谢。
aaronwangnk 回复 第5楼 的 wzy1713: 试了一下,不是这个原因。 不过我发现,如果数据库中数据的格式设置为number(m,n)的形式,则读出来都是0. 如果是Number格式,读出来就正确。 这是什么原因呢?又谁知道啊?多谢多谢啦。
G_will 没有用过Oracle,说一下我的想法: 1.考虑ODBC和Oracle的调用的问题,比如安装版本更合适的ODBC驱动。 2.考虑在发SQL语句中,直接转换格式,select convert(int,col) from **** ,这个还需要参考Oracle自己的语法。 3.问题应该不在R这边。
aaronwangnk 回复 第7楼 的 G_will: 的确应该是oracle和ODBC以及R中间数据转换出现的问题。在oracle中的decimal类型的数据都不能直接读取到R中。我使用to_number把数据转化后可以成功读取。虽然不清楚内在机理到底是什么,不过现在可以正确读取了。能读取数据才能开始用R工作了。多谢!!
fan 回复 第2楼 的 刘思喆:我碰到的问题正好相反,我用sqlQuery从SQL Server中读数值型的指标数据(含NULL),结果变成了character类型了,读的时候我用了G_will说的convert(float, ***),还是不行。我的数据有60多万行,如果读出来之后再转换格式,效率很低啊,郁闷中……
bjt 回复 第9楼 的 fan:大概原因是里面存在字符,所以被强制转化为character,没什么好办法。我也碰到过类似的事情——数据库里面的每个数字都是用引号引起来的。处理的时候要先去掉引号,再转化,很麻烦
fan 回复 第11楼 的 刘思喆:数据库里除了数字之外就是NULL,要说字符也只能是它了,但是sqlQuery把NULL读成了NA(不过这正好符合我的要求,呵呵)。因为不能更改数据库的,所以只能读出来之后再转化。
aaronwangnk 在另外一台电脑上装了RODBC后居然没有出现问题,不过现在都不敢使用R了,如果一直出现这样的问题。以后程序的重用性就会受到很大挑战啊。本来满腔热血的,就这样被打击了。感觉还是SAS与数据库的接口好一些。不过在64bit下也遇到了一些问题。这年头,唉。。。
aaronwangnk 回复 第14楼 的 刘思喆:虽然是别人建的表,但是很规范的,数据类型是decimal类型的,没有问题。用其他软件,比如sas/matlab/python连接都没有出现问题。就是用RODBC时出现了问题。也没辙了。只有在自己的笔记本上发现能取出来。希望有一天能发现是什么问题吧。或者等RODBC什么时候能够再升级,解决这个问题。