mysql concat regexp字边界和引用

时间:2012-08-02 11:04:45

标签: mysql regex concat word-boundary

这是我的查询

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

我用这个替换了mysql来使用另一个例子中的单词边界。但是现在我遇到了转义撇号的问题,即使匹配也没有在数据库中找到dell。

2 个答案:

答案 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;