Bjo*_*Sch 1 sql-server import r type-conversion
我在SQL表中有一列,其中包含15位数字ID,在MSSQL中存储为nvarchar(255)(例如'30000005000008498')。
如果我使用robdc库对此运行sql查询,则数据将隐式转换为数字。
library("RODBC")
odbcChannel <- odbcConnect("TableName")
ID <- sqlQuery(odbcChannel, "SELECT DISTINCT [ID] FROM TEST4")
Run Code Online (Sandbox Code Playgroud)
我已经通过验证了
str(ID)
Run Code Online (Sandbox Code Playgroud)
我尝试的下一件事是使用以下方法将数据转换为字符
ID <- as.character(ID)
Run Code Online (Sandbox Code Playgroud)
这可以正常工作而不会收到错误消息。不幸的是,部分数据被更改了,这对于唯一的ID来说是有害的:
最小示例:
a = 30000005000008498
b <- as.character(a)
Run Code Online (Sandbox Code Playgroud)
输出为:
[1] "30000005000008496"
Run Code Online (Sandbox Code Playgroud)
我认为这可能与数字的最大大小有关。对于较小的数字,as.character可以正常工作。但是,我不知道从SQL导入时如何保留初始ID。
问题1:是否有可能避免对num的隐式排印?
Question2:有什么想法可以在不更改R的情况下从SQL导入15位字符串吗?
使用as.is = TRUE。
testid <- sqlQuery(database,"SELECT CAST(id as CHAR) as id from my_table", as.is=TRUE);
Run Code Online (Sandbox Code Playgroud)
即使数据库中的列ID为数字,testid也将是包含字符输入的数据框。我认为可以为每列分别设置as.is(使用as.is = c(..))或同时为所有列设置。
当列已经是VARCHAR类型时,可能不需要CAST(.. as CHAR)。