在mysql中相同的字符3次条件

bar*_*oco 7 regex mysql

我想要一个查询(在msyql中)来获取具有相同字符的记录3次:

aa => false
aaa => true
baaa => true
aaab => true
aaaaaab => true
baaab => true
babababa => false
Run Code Online (Sandbox Code Playgroud)

对于任何角色,不仅是'a'和'b'.

以下句子不起作用:

SELECT field1
FROM mytable
WHERE field1 REGEXP '(.)\1\1';
Run Code Online (Sandbox Code Playgroud)

Dou*_*ess 0

我知道这不是您想要的,但无论如何我都玩得很开心。完善我的功能构建技能。

drop function if exists char_repeats;
DELIMITER //

CREATE FUNCTION char_repeats(string varchar(255), repeat_count int)
    RETURNS int DETERMINISTIC
BEGIN
    DECLARE pos int;
    DECLARE len int;
    DECLARE last_char CHAR(1);
    DECLARE cnt int;
    DECLARE ch CHAR(1);

    SET pos = 0;
    SET cnt = 1;
    SET last_char='\0';
    SET len = length(string);


    REPEAT
        SET ch = substring(string, pos, 1);
        IF last_char = ch THEN
           SET cnt = cnt + 1;
        ELSE
           SET cnt = 1;
           SET last_char = ch;
        END IF;

        SET pos = pos + 1;
    UNTIL pos = len OR cnt = repeat_count
    END REPEAT;
    RETURN cnt = repeat_count;
END
//

DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

它并没有那么慢 - 我在 25 秒内针对平均长度为 17 个字符的字段(在我的本地 MBP 上)在约 270,000 条记录的数据库中运行了它。