2012-08-02 78 views
2

这里是我的查询MySQL的CONCAT正则表达式字边界和报价

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

我取代MySQL的像这样在这里使用单词边界的另一个例子。但是现在我遇到了一个逃跑撇号的问题,即使有匹配,它也不会在数据库中找到'dell'。

回答

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

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

作为'不是单词字符,它不可能是一个字的结尾,因此[[:>:]]无法比拟的。

0

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

DROP FUNCTION IF EXISTS pp $$ CREATE FUNCTION pp(SLIST VARCHAR(100))返回焦炭(100)CHARSET LATIN1 BEGIN 申报sregex VARCHAR(100); SET slist ='G'; return Concat('[[::<:]]',Slist,'[[:>:]]'); END;