通过RODBC导入SQL - 隐含后的错误值?强制转换

时间:2015-09-01 09:55:21

标签: sql-server r import type-conversion

我在SQL表中有一个列,其中包含在MSSQL中存储为nvarchar(255)的15位数ID(例如'30000005000008498')。

如果我使用robdc库对此运行sql查询,则数据会被隐含地转换为数字。

library("RODBC")

odbcChannel <- odbcConnect("TableName")

ID <- sqlQuery(odbcChannel, "SELECT DISTINCT [ID] FROM TEST4")

我已通过

验证了这一点
str(ID)

我接下来尝试的是使用

将数据转换为角色
ID <- as.character(ID)

无需收到错误消息即可使用。不幸的是,部分数据被改变了,这对于唯一的ID是坏的:

最低范例:

a = 30000005000008498
b <- as.character(a)

输出是:

[1] "30000005000008496"

我认为它可能与数字的最大大小有关。对于较小的数字,as.character工作正常。但是,从SQL导入时,我无法弄清楚如何保留初始ID。

问题1:是否有可能避免对num?

进行隐式打字

问题2:如何在不更改R的情况下从SQL导入15位字符串的任何想法?

1 个答案:

答案 0 :(得分:5)

使用as.is = TRUE。

testid <- sqlQuery(database,"SELECT CAST(id as CHAR) as id from my_table", as.is=TRUE);

即使数据库中的列id是数字,testid也将是包含字符输入的数据框。 我认为as.is可以分别为每一列设置(使用as.is = c(..))或同时为所有列设置。

当列已经是VARCHAR类型时,可能不需要CAST(.. as CHAR)。