Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite instr(…)不区分大小写的查询_Sqlite_Collation_Case Sensitive_Case Insensitive - Fatal编程技术网

SQLite instr(…)不区分大小写的查询

SQLite instr(…)不区分大小写的查询,sqlite,collation,case-sensitive,case-insensitive,Sqlite,Collation,Case Sensitive,Case Insensitive,我有一个SQL表,其中包含区分大小写的文本。 现在我想搜索不区分大小写的文字,如果出现在文本中。当然,一种方法是只执行[…]类文本“%”和类文本“%”。。。但由于它类似于“%1”,所以总是进行完整的表扫描,我不能使用索引。我的问题是:这可以优化吗 我发现的一件事是instrtext,>0,但这是区分大小写的。我也用COLLATE NOCASE试用过,但没有任何变化。这里唯一的方法是instrlowertext,这也是由于较低的。。。在不太好的情况下,所有的搜索词都是小写的 一个不起作用的小例子:

我有一个SQL表,其中包含区分大小写的文本。 现在我想搜索不区分大小写的文字,如果出现在文本中。当然,一种方法是只执行[…]类文本“%”和类文本“%”。。。但由于它类似于“%1”,所以总是进行完整的表扫描,我不能使用索引。我的问题是:这可以优化吗

我发现的一件事是instrtext,>0,但这是区分大小写的。我也用COLLATE NOCASE试用过,但没有任何变化。这里唯一的方法是instrlowertext,这也是由于较低的。。。在不太好的情况下,所有的搜索词都是小写的

一个不起作用的小例子:

创建表T c VARCHAR10 COLLATE NOCASE; 在tc值中插入A; 在tc值b中插入; 在Tc COLLATE NOCASE上创建索引内容\文本; 从T中选择*,其中instrc,'a'比较NOCASE;
一种非常有效的方法是在较大字符串中不敏感地搜索大小写中的单词,即使用

例如:

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

如果您的数据已经存在于表中,则该模式可能有助于节省一些空间。

您不必做任何花哨的事情,只需使用下面的函数:

SELECT * FROM
  Questions
WHERE
  INSTR(lower(Text),lower('Text'))

旁注:就像like一样,INSTR不能使用索引。这个解决方案已经有问题了。他没有回答。