忽略 MYSQL Like 查询中的括号
Ignore parentheses in MYSQL Like query
我有一个示例 MYSQL table,其中包含以下行:
name
------
Oppo A71 (2018)
Plum Flipper (2018)
Lenovo K5 Note (2018)
Huawei Y9 (2018)
Huawei Y7 (2018)
我想让用户搜索数据库。问题在于,在大多数情况下,用户会搜索不带括号的关键字 2018
,例如 samsung a8 2018
而不是 samsung a8 (2018)
.
因此对于以下查询:
SELECT * FROM phones WHERE name LIKE '% 2018 %'
它 return 什么都不会,因为 2018
存储在数据库中,周围有括号。
如果我将查询切换为:
SELECT * FROM phones WHERE name LIKE '%2018%'
它会正确显示结果,但我不希望查询匹配文本(如果它是字符串的一部分)或者 return 数千个不相关的行。这些词必须是实际发现的词,而不是词的一部分。所以我一年左右肯定有空位。
有没有办法在 运行 LIKE
时忽略括号,以便 2018
例如匹配以 (2018)
作为单词的行?
一种方法是正则表达式。但是使用 like
,你可以在匹配之前替换括号:
SELECT *
FROM phones
WHERE REPLACE(REPLACE(name, '(', ' '), ')', ' ') LIKE '% 2018 %'
您可以检查两个条件并结合 OR
来检查这两种情况。尝试:
SELECT * FROM phones
WHERE name LIKE '% 2018 %' OR
name LIKE '%(2018)%'
虽然 Gordon Linoff 提供的答案肯定有效,但当您的数据集增长时,它的表现不会很好,更好的方法是在您的 table 上使用全文搜索,这应该可以处理这类问题问题更简单。
您可以使用正则表达式将 2018 单独查找为一个词。只需在其周围使用词边界元素即可:
SELECT *
FROM phones
WHERE name REGEXP '[[:<:]]2018[[:>:]]'
我有一个示例 MYSQL table,其中包含以下行:
name
------
Oppo A71 (2018)
Plum Flipper (2018)
Lenovo K5 Note (2018)
Huawei Y9 (2018)
Huawei Y7 (2018)
我想让用户搜索数据库。问题在于,在大多数情况下,用户会搜索不带括号的关键字 2018
,例如 samsung a8 2018
而不是 samsung a8 (2018)
.
因此对于以下查询:
SELECT * FROM phones WHERE name LIKE '% 2018 %'
它 return 什么都不会,因为 2018
存储在数据库中,周围有括号。
如果我将查询切换为:
SELECT * FROM phones WHERE name LIKE '%2018%'
它会正确显示结果,但我不希望查询匹配文本(如果它是字符串的一部分)或者 return 数千个不相关的行。这些词必须是实际发现的词,而不是词的一部分。所以我一年左右肯定有空位。
有没有办法在 运行 LIKE
时忽略括号,以便 2018
例如匹配以 (2018)
作为单词的行?
一种方法是正则表达式。但是使用 like
,你可以在匹配之前替换括号:
SELECT *
FROM phones
WHERE REPLACE(REPLACE(name, '(', ' '), ')', ' ') LIKE '% 2018 %'
您可以检查两个条件并结合 OR
来检查这两种情况。尝试:
SELECT * FROM phones
WHERE name LIKE '% 2018 %' OR
name LIKE '%(2018)%'
虽然 Gordon Linoff 提供的答案肯定有效,但当您的数据集增长时,它的表现不会很好,更好的方法是在您的 table 上使用全文搜索,这应该可以处理这类问题问题更简单。
您可以使用正则表达式将 2018 单独查找为一个词。只需在其周围使用词边界元素即可:
SELECT *
FROM phones
WHERE name REGEXP '[[:<:]]2018[[:>:]]'