在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

上一篇: Same character 3 times condition in mysql

下一篇: ASP.NET Membership & Role