簡體   English   中英

dplyr數據庫中的SQL篩選器查詢區分大小寫

[英]SQL filter query in dplyr database case sensitive

我想在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

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

在SQLite中,乍看起來並不容易,但是有一個解決方案。

您可以在此博客中查看完整的解決方案(基本上是自定義功能)。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM