![](/img/trans.png)
[英]Query case sensitive in SQL database without setting database to case sensitive
[英]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.