Mariadb
在 MariaDB 中的某些位置開始和結束的字元串中查找重複的字母?
我需要在第 4 到第 10 位之間找到所有包含雙字母的字元串。
我可以通過以下方式找到所有雙字母
'([a-zA-Z])\1{1,3}';
和職位
SELECT SUBSTRING(columnmame, 4, 9 ) FROM mytable;
但我不知道如何將它們結合起來?
以便找到以下範例:
Liverpool; Sheffield Central.
但不是
Arran.
我努力了
WITH cte AS ( SELECT *, SUBSTRING(columnmame, 4, 9) AS c FROM mytable ) SELECT * FROM cte WHERE c REGEX '([a-zA-Z])\1{1,3}';
我知道 MariaDB 不支持反向引用,例如 ‘\1’。
'^.{3,8}(\w)\1'
解釋 -
^ -- anchored at start .{3,8} -- match 3 to 8 characters (may not be the exact numbers you need) (\w) -- (or (\[[:ALPHA:]] or ([a-zA-Z]) -- match 1 letter \1 -- match the same string that was matched by (...) (And don't care about what occurs afterward.
對於 MySQL 8,反斜杠需要加倍。
一個簡單的解決方案是創建一個僅包含 4 到 10 值的數字表,如下所示:
CREATE TABLE Numbers ( nr INT ); insert into Numbers values (4),(5),(6),(7),(8),(9),(10);
然後使用:
SELECT * FROM myTable WHERE EXISTS (SELECT * FROM Numbers WHERE nr < LENGTH(col) AND SUBSTRING(col, nr, 1) = SUBSTRING(col, nr + 1, 1) ) ;
僅當
SUBSTRING(col, nr, 1) = SUBSTRING(col, nr + 1, 1)
有兩個連續的相同單詞時才會返回行。根據第 4 到第 10 部分,它受數字表上的值的限制