2

我有一个字符串表,想要检索包含预定义列表中至少两个字符的所有行。通过示例更好地解释:

我的表如下所示:

Id|Word
 1|Cat
 2|Chicken
 3|Dog
 4|Elephant
 5|Fish
 6|Goat

这可能是我的字符列表:

Characterlist = 'A', 'B', 'C', 'E'

然后 select 语句应该返回:Cat, Chicken, Elephant

我查看了 mySQL 文档中的字符串函数,但找不到合适的函数。甚至可能吗?

4

1 回答 1

4

这是一种效率低下的方法,它依赖于将布尔条件返回的 0 或 1 相加:

SELECT
  *,
  (
    (UPPER(Word) LIKE '%A%') +
    (UPPER(Word) LIKE '%B%') + 
    (UPPER(Word) LIKE '%C%') + 
    (UPPER(Word) LIKE '%D%') 
  ) AS lettermatches
FROM yourtable
HAVING lettermatches >= 2

每个LIKE条件都返回 0 或 1。它们相加,并且HAVING子句将结果限制为得分为 2 或更高的行。

使用它可能会更快,LOCATE()而不是LIKE

SELECT
  *,
  (
    (LOCATE('A', UPPER(Word)) > 0) +
    (LOCATE('B', UPPER(Word)) > 0) + 
    (LOCATE('C', UPPER(Word)) > 0) + 
    (LOCATE('D', UPPER(Word)) > 0) 
  ) AS lettermatches
FROM yourtable
HAVING lettermatches >= 2
于 2012-07-24T11:33:51.360 回答