我想过滤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
答案 0 :(得分:0)
在某些RDBMS(如PostgreSQL)中,这很容易做到,只需使用ILIKE
:D
在SQLite中,乍看起来并不容易,但是有一个解决方案。
您可以查看this blog以获得完整的解决方案(基本上是自定义功能)。
如果不需要仅支持ASCII的Unicode,则可以使用COLLATE NOCASE
,示例如下所示:
...a LIKE '%MS%' COLLATE NOCASE