【问题标题】:MySQL Select as if tokenized using RegexpMySQL 选择就像使用 Regexp 进行标记一样
【发布时间】:2021-04-18 09:44:22
【问题描述】:

我在 products 模型字段中寻找一个字符串,该字符串前面或后面应该有一个空格,除非它是完全匹配的。

我可以通过说来具体使用四种可能的排列方式

SELECT products_id, products_model FROM products WHERE products_model LIKE '% UMA12' OR products_model LIKE 'UMA12 %' OR products_model LIKE '% UMA12 %' OR products_model = 'UMA12';

但是我可以使用一个正则表达式来更简洁地表达这一点吗?

这个查询应该匹配

FOO UMA12 BAR
UMA12
UMA12 FOO 
FOO UMA12

但不是

UMA1 
FUMA1 

等等

【问题讨论】:

标签: mysql regex


【解决方案1】:

如果您想将 UMA12 作为独立词查找,则使用带有词边界的 REGEXP

SELECT *
FROM products
WHERE products_model REGEXP '[[:<:]]UMA12[[:>:]]';

注意:在 MySQL 8+ 上,您需要对 REGEXP 使用稍微不同的语法,并带有单词边界:

SELECT *
FROM products
WHERE products_model REGEXP '\\bUMA12\\b';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    相关资源
    最近更新 更多