这是我的查询
SELECT producer FROM producers WHERE producer REGEXP CONCAT('[[:<:]]', 'dell\'', '[[:>:]]')
我用这个替换了mysql来使用另一个例子中的单词边界。但是现在我遇到了转义撇号的问题,即使匹配也没有在数据库中找到dell。
答案 0 :(得分:2)
select count(*) from (select 'dell\'' as c) t where c regexp '[[:<:]]dell\''; -- -> 1
select count(*) from (select 'dell\'' as c) t where c regexp '[[:<:]]dell\'[[:>:]]'; -- -> 0
所以这是失败的尾随边界要求。这是有道理的。引自the docs:
这些标记代表字边界。他们匹配开头和 词尾,分别。一个单词是一系列单词字符 不在单词字符之前或之后的单词字符。一个字 character是alnum类中的字母数字字符或 下划线(
_
)。
由于'
不是单词字符,因此它不能是单词的结尾,因此[[:>:]]
无法匹配。
答案 1 :(得分:0)
我创建了UDF并解决了这个问题,只需调用一个函数,你可以设置前缀,后缀和值取决于你的条件。
DROP FUNCTION如果存在pp
$$
CREATE FUNCTION const int
(Slist varchar(100))RETURNS char(100)CHARSET latin1
开始
声明sregex varchar(100);
SET slist ='G';
返回Concat('[[:&lt;:]]',Slist,'[[:&gt;:]]');
END;