dplyr数据库中的SQL筛选器查询区分大小写

时间:2018-08-25 09:40:21

标签: sql r dplyr r-dbi

我想过滤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之后添加BINARY可能会完成这项工作,但是没有。

tks

1 个答案:

答案 0 :(得分:0)

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

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

您可以查看this blog以获得完整的解决方案(基本上是自定义功能)。

如果不需要仅支持ASCII的Unicode,则可以使用COLLATE NOCASE,示例如下所示:

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