在mysql中相同的字符3次条件
我想要一个查询(在msyql中)获取3次具有相同字符的记录:
aa => false
aaa => true
baaa => true
aaab => true
aaaaaab => true
baaab => true
babababa => false
对于任何角色,不仅是'a'和'b'。
以下句子不起作用:
SELECT field1
FROM mytable
WHERE field1 REGEXP '(.)11';
可能是这可以帮助你。
select * from test1 where name REGEXP '[a]{3}|[b]{3}|[c]{3}|[d]{3}|[e]{3}|[f]{3}|[g]{3}|[h]{3}|[i]{3}|[j]{3}|[k]{3}|[l]{3}|[m]{3}|[n]{3}|[o]{3}|[p]{3}|[q]{3}|[r]{3}|[s]{3}|[t]{3}|[u]{3}|[v]{3}|[w]{3}|[x]{3}|[y]{3}|[z]{3}';
它返回3个相同和连续字母的记录。
由于MySQL中正则表达式的限制,我不认为有一个完全在数据库中完成这个操作的简单方法。 也许作为后处理步骤做起来会更容易。 以下是在命令行上使用sed
的建议:
mysql -BN {connection parameters and query} | sed -n '/(.)11/p'
我知道这不是你要找的东西,但无论如何我都乐在其中。 擦掉我的功能建设技能。
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=' ';
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 ;
速度并不慢 - 我在25秒内(在我的本地MBP上)在平均长度为17个字符的字段上跨越了约270,000个记录数据库。
链接地址: http://www.djcxy.com/p/54625.html