【问题标题】:Making a query which selects the news that contain a specific word进行查询以选择包含特定单词的新闻
【发布时间】:2021-01-14 08:00:40
【问题描述】:
       CREATE TABLE IF NOT EXISTS news (
           title TEXT PRIMARY KEY,
           newsletter_description TEXT NOT NULL
       );

我需要编写一个查询来选择所有在titlenewsletter_description 中包含单词“apple”或“watermelon”(或两者)的news,我不太确定如何我能做到。 (不区分大小写,也可以是“AppLe”或“WaterMelon”)

【问题讨论】:

  • 我不喜欢这种接受答案然后不接受的行为,但这很好,您有权选择最佳答案。

标签: sql sqlite sqlitejdbc


【解决方案1】:
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

【讨论】:

  • 您的回答对于 SQlite 来说非常详细,但不要专注于其他答案,无论它是否有意义,尝试告诉它的积极方面,我相信除了no point 部分不使用lower
  • 我想强调的是 Sqlite 不区分大小写。我看到人们在这个线程的很多地方都提到了低/高功能。所以,为了防止人们有错误的印象/知识留在他们的脑海中,我觉得特意提一下。否则我没有任何其他意图。感谢您的评论。
【解决方案2】:

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

【讨论】:

  • 我如何使用它来查找查询中的所有单词,换句话说,完整的查询命令会是什么样子?
  • 选择 * from news where lower(title) like '%apple%' 或 lower(title) like '%watermelon%'。如果您使用其他 where 子句(如日期或其他内容),请将请求放在括号中: select * from ... where (lower(title) ... or lower(title)...) and date = ' 2020101'
【解决方案3】:

您可以使用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%';
    

【讨论】:

    【解决方案4】:

    使用返回您搜索的所有单词并将其连接到表中的 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
    

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-25
        • 1970-01-01
        • 2020-10-06
        相关资源
        最近更新 更多