r语言 - dplyr数据库中的SQL过滤器查询区分大小写



我想在R中过滤SQLite数据库,以查找字符串中的模式。问题是 LIKE sql 查询似乎不区分大小写。 下面是一个可重现的示例:

library(DBI)
library(dplyr)
tb <- dplyr::tibble(a=c(rep("aMSq",3), rep("amsq",3), rep("AA",3)))
mydb <- DBI::dbConnect(RSQLite::SQLite(), "")
DBI::dbWriteTable(mydb, "tb", tb, overwrite=T)
### Filtering the table
tb_sqlite <- tbl(mydb, "tb")
tb_sqlite %>% 
filter( sql("a LIKE '%MS%'"))
dbDisconnect(mydb)

输出不区分大小写:

# Source:   lazy query [?? x 1]
# Database: sqlite 3.22.0 []
a    
<chr>
1 aMSq 
2 aMSq 
3 aMSq 
4 amsq 
5 amsq 
6 amsq

如何进行区分大小写的搜索? 我已经看到在 LIKE 之后添加二进制可能会完成这项工作,但它没有。

传统知识

在一些RDBMS中,比如PostgreSQL,这很容易做到,只需使用ILIKE:D

在SQLite中,乍一看并不容易,但是有一个解决方案。

您可以查看此博客以获取完整的解决方案(基本上是自定义功能(。

如果您不需要支持 Unicode,只需支持 ASCII,那么您可以使用COLLATE NOCASE,您的示例如下所示:

...a LIKE '%MS%' COLLATE NOCASE

最新更新