如何在R中的sqlQuery函数中使用REGEXP

时间:2013-06-05 17:17:45

标签: mysql sql regex r

修改-1

我的实际数据库是MSAccess格式,我使用sqlQuery R中的RODBC函数导入数据。以下是我正在创建的假数据库,以便我可以提供可重现的示例RSQLite包。我想用regexp sqlQuery功能。

结束 EDIT-1

以下是使用RSQLite包的模拟数据库和关联查询。 REGEX(或REGEXP)函数不起作用,我无法弄清楚原因。

data0 <- read.csv(textConnection(
'ID  value
P9W38   97
P9W39   17
P9W40   78
P9W41   7
P9W42_1 38
P9W42   13
P9W43   18
P9W44   76
P9W45   65
P9W46   24
P9W46_1 44
P9W47   8
P9W48   31
P9W49   82
P9W50   52
P9W50_2 55
P9W51   26
P9W52   33
P9W52_2 79
P9W53   67
P9W54   74
P9W55   55'
),sep='')

dbWriteTable(con, "Mydata", data0)

这些有效

dbGetQuery(con, paste0(' select * from Mydata where [ID] like \'P9W38\' '))
dbGetQuery(con, paste0(' select * from Mydata where [ID] like \'P9W42%\' '))

但这些不起作用

dbGetQuery(con, paste0(' select * from Mydata where [ID] REGEX \'P9W(38|40|50)\' '))
dbGetQuery(con, paste0(' select * from Mydata where [ID] REGEX \'P9W(38|40|50)(_1){,1}\' '))

有任何建议吗?

1 个答案:

答案 0 :(得分:0)

我认为你的问题在你有REGEX而不是REGEXP的查询中:

http://dev.mysql.com/doc/refman/5.1/en/regexp.html

所以你的代码应该是这样的:

dbGetQuery(con, paste0(' select * from Mydata where [ID] REGEXP \'P9W(38|40|50)\' '))
dbGetQuery(con, paste0(' select * from Mydata where [ID] REGEXP \'P9W(38|40|50)(_1){,1}\' '))

请提供一些反馈,我对数据库不起作用,但我认为这将解决您的问题