0
       CREATE TABLE IF NOT EXISTS news (
           title TEXT PRIMARY KEY,
           newsletter_description TEXT NOT NULL
       );

我需要编写一个查询来选择所有news包含“苹果”或“西瓜”(或两者)在他们title或他们中的单词newsletter_description,我不太确定我该怎么做。(不区分大小写,也可以是“AppLe”或“WaterMelon”)

4

5 回答 5

0

您可以使用like运算符并进行不区分大小写的搜索,您可以使用lowerupper在实际列上进行搜索,并且还必须在相应地传递给查询之前将输入转换为下/上,

select * 
  from news 
 where lower(newsletter_description) like '%watermelon%' 
    or lower(newsletter_description) like '%apple%'
    or lower(title) like '%watermelon%' 
    or lower(title) like '%apple%';
    
于 2020-09-28T18:05:48.650 回答
0

您可以使用 « lower(title) like '%apple%' » 实际上,lower 将所有字段都放在小号中,这可以帮助您在不知道他是如何写的情况下找到所需的单词

于 2020-09-28T18:07:44.560 回答
0
SELECT * FROM NEWS
WHERE title LIKE "%apple%" OR 
      title LIKE "%watermelon%" OR
      newsletter_description LIKE "%apple%" OR 
      newsletter_description LIKE "%watermelon% 

默认情况下,SQlite 对 ASCII 字符实现 LIKE 运算符不区分大小写。除非您在文本中使用 unicode 字符,否则您可以使用上述查询。

但是,如果您使用 unicode 字符,则使用 lower 或 upper 函数也不起作用。因此,根本没有使用 lower 或 upper 函数的意义。

https://www.sqlite.org/c3ref/strlike.html

在此处输入图像描述

于 2020-09-28T18:23:41.833 回答
0

使用 CTE 返回您搜索的所有单词并将其连接到表中:

with cte(word) as (values ('apple'), ('watermelon'))
select n.*
from news n inner join (select '%' || word || '%' word from cte) c
on n.title like c.word or n.newsletter_description like c.word
于 2020-09-28T18:31:18.230 回答
0

天真的方法是 select * from new where lower(title) like '%apple%' or lower(title) like '%watermelon%' or lower(newsletter_description) like '%apple%' or lower(newsletter_description) like '%watermelon %';

于 2020-09-28T19:50:42.990 回答