我正在从SQL服务器读取数据。 SQL服务器数据库具有来自各种来源(医疗中心,HMO和州注册管理机构)的人员特定信息的表。每个表中都有一个名为PID的参与者标识符。 PID的构造在很大程度上取决于数据源,有些数据源的PID值完全由数值组成,其他数据源的PID值是混合的字母数字。
为了产生组合源分析,我需要构建一个由各种来源的表组成的数据框。 PID作为str(20)存储在SQL服务器上。我想将数据读入R,保持SQL服务器上指定的类型。我正在使用带有odbcConnect的RODBC包来声明我与SQL服务器的ODBC连接,并使用sqlFetch来读取数据,如下所示:
> library("RODBC")
> ch <- odbcConnect("PROSPRdfm", uid="........", pwd="........")
>
> # Read h3_crc_ppt data from SQL server
> crc_ppt <- sqlFetch(ch, "h3_crc_ppt")
然后我附上crc_ppt并测试PID是否为字符:
> attach(crc_ppt)
> is.character(PID)
[1] FALSE
对于此特定表,所有PID均为数字。但是其他表格的PID是字母数字。是否有一个可以传递给sqlFetch的参数会强制R遵守SQL服务器上指定的变量类型?
答案 0 :(得分:0)
尝试sqlFetch(ch, "h3_crc_ppt", as.is = TRUE)
来自?sqlQuery
(sqlFetch
包装)
尽可能sqlGetResults以二进制形式传输数据:对于(ODBC)SQL类型double,real,integer和smallint以及二进制SQL类型(作为原始向量列表传输,给定类“ODBC_binary”),会发生这种情况)。所有其他SQL数据类型都通过ODBC接口转换为字符串。
本段仅适用于ODBC作为字符向量返回的SQL数据类型。如果在创建连接时(请参阅odbcConnect)将DBMSencoding设置为非空值,则会重新编码字符串。然后,如果列的as.is为真,则将其作为字符向量返回。否则(检测到的位置)date,datetime和timestamp值将转换为“Date”或“POSIXct”类。 (有些驱动程序似乎会把时间与日期混淆,所以时间也可能会被转换。另外,一些DBMS(例如Oracle)的日期概念是日期时间。)剩余的情况由R使用type.convert转换。当字符数据要转换为数字数据时,选项(“dec”)的设置用于映射ODBC驱动程序在设置小数点时使用的字符 - 在初始化RODBC时将其设置为特定于语言环境的值它尚未设定。