首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQLite实例(...)不区分大小写的查询

SQLite实例(...)不区分大小写的查询
EN

Stack Overflow用户
提问于 2019-12-30 18:30:08
回答 2查看 605关注 0票数 0

我有一个包含区分大小写文本的SQL表。现在我想搜索(不区分大小写)文字是否出现在文本中。当然,一种方法是只执行[...] text LIKE '% <word1> %' AND text LIKE '% <word2> %' ...,但是因为它是LIKE '%,所以它总是一个全表扫描,我不能使用我的索引。我的问题是:这能被优化吗?

我发现的一件事是instr(text, '<word1>') > 0,但它区分大小写。我也在COLLATE NOCASE上尝试过,但没有任何变化。这里唯一的方法是instr(lower(text), '<word1>'),这也是由于lower(...)不是那么好(所有的搜索词都是保证小写的btw)。

Here's一个不起作用的小例子:

代码语言:javascript
运行
复制
CREATE TABLE T (c VARCHAR(10) COLLATE NOCASE);
INSERT INTO T (c) values ("A");
INSERT INTO T (c) values ("b");
CREATE INDEX CONTENT_TEXT ON T(c COLLATE NOCASE);

SELECT * FROM T WHERE instr(c, 'a') COLLATE NOCASE;
EN

回答 2

Stack Overflow用户

发布于 2019-12-30 19:35:18

在较大的字符串中非常有效地搜索大小写敏感的单词的一种方法是使用full text search extension

示例:

代码语言:javascript
运行
复制
sqlite> CREATE VIRTUAL TABLE test USING fts5(foo);
sqlite> INSERT INTO test(foo) VALUES ('the quick red fox jumped over the lazy brown dog');
sqlite> SELECT * FROM test WHERE test MATCH 'FOX';
foo                                             
------------------------------------------------
the quick red fox jumped over the lazy brown dog

如果您的数据已经存在于表中,那么使用external content模式可能会节省一些空间。

票数 1
EN

Stack Overflow用户

发布于 2021-04-19 23:09:58

你不需要做任何花哨的事情,只需要像这样使用"lower“函数:

代码语言:javascript
运行
复制
SELECT * FROM
  Questions
WHERE
  INSTR(lower(Text),lower('Text'))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59529314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档