SQL SELECT 字段包含(单词)不起作用

Posted

技术标签:

【中文标题】SQL SELECT 字段包含(单词)不起作用【英文标题】:SQL SELECT field contains(words) does not work 【发布时间】: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。他真正的问题是一些比较字符串被激怒了。 【参考方案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 请看这个问题,我从这里得到了我的查询***.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”作为标题中唯一单词的查询。

【讨论】:

但它适用于一些记录,我在另一个 *** 问题中得到了这个查询

以上是关于SQL SELECT 字段包含(单词)不起作用的主要内容,如果未能解决你的问题,请参考以下文章

mysql中order by 排序用asc和desc不起作用怎么回事

解决 AutoMapper ProjectTo 不起作用的问题

SQL Server表达式,string ='test'不起作用

SQL Server,临时表,SELECT 语句不起作用

SQL Server 全文搜索对我不起作用

SQL SELECT 仅包含单词的字段