【问题标题】:SQL like statement excluding too muchSQL like 语句排除太多
【发布时间】:2014-02-04 11:42:18
【问题描述】:

我在使用 sql LIKE 语句时遇到了一些问题:

假设我的表中有三条记录,名为articles。该表有一个名为 content 的列:

content
-------
lorem ipsum hey jippi lorem ipsum ipusm lorum
yippi
lorem ipsum heyyippikayay lorem ipsum

以下语句返回所有行:

SELECT * FROM articles
WHERE content LIKE '%jippi%';

但是如何匹配 content1 和 content2。

如果我去:

SELECT * FROM articles
WHERE content LIKE 'jippi%';

我只会得到 content2。此查询排除了 content1,因为它前面有 'hey...',但我的意图是排除字符串 'yippi' 仅作为单词的一部分出现的记录,如 content3。但是,如果在字符串的开头找到 'yippi',就像在 'yippiyay' 中一样,我想返回这一行。

因此:我需要一个类似 sql 的语句,它只返回我找到确切搜索词或以搜索词开头的单词的记录,即“yippi”或“yippiyay”。

【问题讨论】:

  • 内容 2 是 yippi,但 %jippi% 与之匹配?
  • 试试这个LIKE '% yippi%',在第一个'%'之后放一个空格
  • 是的@DominicZukiewicz,没错。
  • @user1009453:您使用的是什么数据库平台?

标签: sql sql-like


【解决方案1】:

试试

SELECT * FROM articles WHERE content LIKE '%ippi';

我仍然不明白它的目的,但它确实有效......

【讨论】:

  • 也许,我表达的不是很好,但目的很简单。我需要返回找到字符串(只是一个例子)'yippi'的所有记录,无论它前面是否有任何单词。但我不想返回找到字符串的行(偶然)作为字符串的一部分,即'yayippi',除非'yippi'在字符串中排在第一位,即'yippikayay'
【解决方案2】:

也许你应该尝试这样的事情:

SELECT * FROM articles
WHERE content LIKE 'jippi%' or content like '% jippi%';

但这只有在单词之间有一个空格时才有效。 解决方案:

SELECT * FROM articles WHERE content LIKE '%ippi';

很好,但不会捕捉到以 jippi 开头的 jippido 或类似词。

【讨论】:

  • 是的,使用单个空格可能是唯一的方法。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
相关资源
最近更新 更多