这里是我的查询MySQL的CONCAT正则表达式字边界和报价
SELECT producer FROM producers WHERE producer REGEXP CONCAT('[[:<:]]', 'dell\'', '[[:>:]]')
我取代MySQL的像这样在这里使用单词边界的另一个例子。但是现在我遇到了一个逃跑撇号的问题,即使有匹配,它也不会在数据库中找到'dell'。
这里是我的查询MySQL的CONCAT正则表达式字边界和报价
SELECT producer FROM producers WHERE producer REGEXP CONCAT('[[:<:]]', 'dell\'', '[[:>:]]')
我取代MySQL的像这样在这里使用单词边界的另一个例子。但是现在我遇到了一个逃跑撇号的问题,即使有匹配,它也不会在数据库中找到'dell'。
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类中的字母数字字符或 下划线(
_
)。
作为'
不是单词字符,它不可能是一个字的结尾,因此[[:>:]]
无法比拟的。
我创建了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;