R 中的 RODBC 包使用引号创建列名......为啥?

Posted

技术标签:

【中文标题】R 中的 RODBC 包使用引号创建列名......为啥?【英文标题】:RODBC package in R creates column names with quotes... why?R 中的 RODBC 包使用引号创建列名......为什么? 【发布时间】:2015-08-06 17:23:49 【问题描述】:

所以,我使用 R 中的 RODBC 包来写入和读取我的数据库,这就是发生的情况:

让我们以 mtcars 为例

我将 mtcars 保存到我的数据库中:

sqlSave(con, mtcars, "MTCARS",rownames = F)

然后我阅读了我刚刚保存的内容:

sqlQuery(con,"select * from MTCARS")

完美!它有效......现在让我们试试这个:

sqlQuery(con,"select mpg from MTCARS")
[1] "42S22 904 [Oracle][ODBC][Ora]ORA-00904: \"MPG\": invalid identifier\n"
[2] "[RODBC] ERROR: Could not SQLExecDirect 'select mpg from MTCARS'"

所以我检查了数据库,它用引号保存了列名!!因此,要使我的查询起作用,我必须这样做:

sqlQuery(con,"select \"mpg\" from MTCARS")

为什么?我该如何解决这个问题?

【问题讨论】:

只是猜测:如果在调用sqlSave 之前将mtcars 中的所有列名转换为大写会发生什么? 你猜对了!!太棒了:) 【参考方案1】:

Oracle 通常只使用大写的列名。在过程中的某个时刻,数据框列名被引用,因为它意识到它们不是大写的。我不确定这是否发生在 RODBC、驱动程序或数据库本身中。

无论如何,首先将列名转换为大写似乎可以解决问题。

【讨论】:

也适用于 Postgres。

以上是关于R 中的 RODBC 包使用引号创建列名......为啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 MAC 10.11.6 在 R 中安装 RODBC 包

R ODBC - 用空格查询列名

RODBC 包的替代方案,用于从 R 连接到 MS Access

在 R 中使用 RODBC 创建循环 SQL QUERY

如何从R数据框中的列名中删除不必要的单引号(')?

SQL Hive:选择 (*) LIMIT 1 基于 3 列的组合,R 中的联合,RODBC