【问题标题】:SQL SELECT field contains(words) does not workSQL SELECT 字段包含(单词)不起作用
【发布时间】:2013-01-01 04:17:48
【问题描述】:

我有这个问题:

SELECT *
FROM
  (SELECT ' ' + REPLACE(Title,' ','  ') + ' ' AS Title
   FROM MyTable) t
WHERE Title LIKE '% Samsung %'
  AND Title LIKE '% Galaxy %'
  AND Title LIKE '% Axiom %'
  AND REPLACE(REPLACE(REPLACE(Title,' Samsung ',''),' Galaxy ',''), ' Axiom ','') = ''

此查询应在 MyTable 字段 Title 中搜索并显示包含 LIKE 中指定的单词的所有行。

我没有收到任何错误,但字段标题包含一行带有以下字符串“Samsung Galaxy Axiom R830”,我的查询没有返回它(它应该返回)。

这是我最初的问题,它适用于一些记录,但不适用于所有 SQL SELECT LIKE containing only specific words

【问题讨论】:

  • 这不匹配,因为您要的是 `Samsung`。
  • 您的最终条件不是说字符串只能包含 Samsung、Galaxy 和 Axiom 吗?你给的字符串会剩下'R830'。
  • 在 WHERE - SQL 基础中必须使用 OR 而不是 AND。
  • @Art - 这不是这里的实际问题。如果他想确保一行中的给定列包含所有这些单词,他将需要AND。他真正的问题是一些比较字符串被激怒了。

标签: sql select sql-like


【解决方案1】:

可能是因为您正在寻找“Samsung”前后有一个空格,而字符串在“Samsung”之前没有空格?

【讨论】:

  • 不,不是这样。我已将查询修改为如下所示,但它仍然无法正常工作。 SELECT * FROM (select ' ' + REPLACE(Title,' ',' ') + ' ' as Title from MyTable) t WHERE Title LIKE '%Samsung %' AND Title LIKE '% Galaxy %' AND Title LIKE '% Axiom % ' AND REPLACE(REPLACE(REPLACE(Title,'三星',''),'银河',''),'公理','') = ''
  • 嗯,就是这样。您正在使用AND;当你在寻找_Samsung_时,你怎么能指望找到Samsung
  • 请看这个问题,我从这里得到了我的查询stackoverflow.com/questions/14290857/…
【解决方案2】:

你有空格之类的。也许你想要这样的东西:

WHERE (Title LIKE '% Samsung %' or title like '%Samsung' or title like 'Samsung%')
  AND (Title LIKE '% Galaxy %' or title like '%Galazy' or title like 'Galaxy%')
  AND (Title LIKE '% Axiom %' or title like '%Axiom' or title like 'Axiom%')
  AND replace(REPLACE(REPLACE(REPLACE(Title,'Samsung',''),'Galaxy',''), 'Axiom',''), ' ') = ''

其实我想想,我觉得最后的替换就足够了:

where replace(REPLACE(REPLACE(REPLACE(Title,'Samsung',''),'Galaxy',''), 'Axiom',''), ' ') = ''

【讨论】:

    【解决方案3】:

    如果标题为“Samsung Galaxy Axiom R830”,则以下条件不成立。

    REPLACE(REPLACE(REPLACE(Title,' Samsung ',''),' Galaxy ',''),' Axiom ','') = ''
    

    写入的替换将输出

    SamsungAxiom R830
    

    这将不匹配空白字符串。

    如果您从替换中删除了空格,则会留下 R830(可能还有一些空格)。正如 Hellion 在他的评论中所说,这是一个要求“Samsung”、“Galaxy”和“Axiom”作为标题中唯一单词的查询。

    【讨论】:

    • 但它适用于一些记录,我在另一个 stackoverflow 问题中得到了这个查询
    猜你喜欢
    • 2012-12-26
    • 2018-03-03
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多