2012-08-02 49 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;