【问题标题】:SQL filter query in dplyr database case sensitivedplyr 数据库中的 SQL 过滤器查询区分大小写
【发布时间】:2018-08-25 09:40:20
【问题描述】:

我想过滤 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

【问题讨论】:

    标签: sql r dplyr r-dbi


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 2015-07-23
      • 1970-01-01
      相关资源
      最近更新 更多