我想要一个查询(在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)
我知道这不是您想要的,但无论如何我都玩得很开心。完善我的功能构建技能。
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 条记录的数据库中运行了它。