2

这是我的查询

SELECT producer FROM producers WHERE producer REGEXP CONCAT('[[:<:]]', 'dell\'', '[[:>:]]') 

我用这个替换了 mysql 以使用此处另一个示例中的单词边界。但是现在我遇到了转义撇号的问题,即使有匹配项,它也无法在数据库中找到 dell'。

4

2 回答 2

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

因此,失败的是尾随边界要求。这是有道理的。引用文档

这些标记代表单词边界。它们分别匹配单词的开头和结尾。单词是前面或后面没有单词字符的单词字符序列。单词字符是 alnum 类中的字母数字字符或下划线 ( _)。

由于'不是单词字符,它不能是单词的结尾,因此[[:>:]]无法匹配。

于 2012-08-02T12:30:28.563 回答
0

我创建了 UDF,它解决了这个问题,只需调用一个函数,您可以根据您的条件设置前缀、后缀和值。

DROP FUNCTION IF EXISTS pp$$ CREATE FUNCTION pp(Slist varchar(100)) RETURNS char(100) CHARSET latin1 BEGIN Declare sregex varchar(100); SET slist = 'G'; return Concat('[[:<:]]',Slist,'[[:>:]]'); 结尾;

于 2015-10-03T12:20:11.433 回答