在 R 语言中使用“like”语句执行 SQL

Posted

技术标签:

【中文标题】在 R 语言中使用“like”语句执行 SQL【英文标题】:Execute SQL with "like" statement in R Language 【发布时间】:2016-09-06 18:22:48 【问题描述】:

我正在尝试通过 R 执行 SQL 查询以从 Access DB 获取数据

普通的 SQL 语句可以正常工作,但是当涉及到 like 语句时,它会抛出错误

下面是代码:

library(RODBC);
channel = odbcDriverConnect("Driver=Microsoft Access Driver (*.mdb,    *.accdb);DBQ=C:/Users/ADMIN/Documents/R.accdb")
test = sqlQuery(channel ,paste('SELECT R.ID, R.Template, R.WEDate FROM R WHERE R.Template Like "*slow*"'))

错误: [1] “07002 -3010 [Microsoft][ODBC Microsoft Access Driver] 参数太少。预期为 2。” [2] "[RODBC] 错误: 无法 SQLExecDirect 'SELECT R.ID, R.Template, R.WEDate FROM R WHERE (R.Template Like \"slow\")'

有没有办法解决这个问题。

【问题讨论】:

只是一个想法,尝试使用% 而不是* @joran 还是一样的错误 尝试颠倒使用双引号和单引号(单引号在里面,双引号在外面)。 @joran 效果不佳 不确定,一定与Access有关,我一直在使用RODBC对其他数据库运行LIKE这样的查询。 【参考方案1】:

考虑@joran 的both 建议,用单引号括住字符串文字并使用ANSI-92 通配符运算符%。在运行内部查询时,即在 MSAccess.exe GUI 程序(默认为 DAO)内或使用 DAO 从外部连接到 Access 时,您将使用星号 *(ANSI-89 模式)。同时,ADO 连接使用包括 RODBC 在内的大多数外部接口使用的百分号。

我能够重现您的问题,并且这两种补救措施都有效。此外,无需使用paste(),因为您没有将任何其他对象连接到查询语句。

library(RODBC);
channel = odbcDriverConnect("Driver=Microsoft Access Driver (*.mdb, *.accdb); 
                             DBQ=C:/Users/ADMIN/Documents/R.accdb")

test = sqlQuery(channel, 
                "SELECT R.ID, R.Template, R.WEDate FROM R WHERE R.Template Like '%slow%'")

【讨论】:

这个组合效果很好,谢谢兄弟的想法

以上是关于在 R 语言中使用“like”语句执行 SQL的主要内容,如果未能解决你的问题,请参考以下文章

R语言︱ 数据库SQL-R连接与SQL语句执行(RODBCsqldf包)

R语言︱ 数据库SQL-R连接与SQL语句执行(RODBCsqldf包)

在sql语句中,like所有的用法

R语言中的if else语句

sql语句中like的用法详细解析

数据存储——SQLite数据库存储——SQL语句——DQL数据查询语言