来源:https://blog.csdn.net/neymar_jr/article/details/103727458?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-103727458-blog-113618913.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-103727458-blog-113618913.pc_relevant_default&utm_relevant_index=1

    说到MySQL的模糊匹配,大家都能想到like,很少人会知道regexp,regexp 可以实现更强大的模糊匹配功能,而且还有很多其他好用的功能。

    比如有一个学生表 student ,要查询姓赵、王、李、陈的学生,用like写会啰嗦,而且性能不好:

    SELECT * FROM student WHERE name like ‘赵%’ or name like ‘王%’ or name like ‘李%’ or name like ‘陈%’ ;

    用regexp 写则很简单:

    SELECT * FROM student WHERE name REGEXP ‘^赵|^王|^李|^陈’ ;

    示例:

    1,匹配以陈开头的学生:

    SELECT * FROM student WHERE name REGEXP ‘^陈’;

    2,匹配以豪结尾的学生:

    SELECT * FROM student WHERE name REGEXP ‘豪$’;

    3,匹配名字中含有 英、雄、豪、杰 其中一个字的学生

    SELECT * FROM student WHERE name REGEXP ‘英|雄|豪|杰’ ;

    或者 SELECT * FROM student WHERE name REGEXP ‘[英雄豪杰]’ ;

    上面两句的区别:都是单个字符用下面的,如果是多个字符用上面的,比如包含 ‘英雄’2字。

    4,检索密码这个字段,包含字母“b”和“g”范围内的所有名称,接着跟任意一个字符,后跟字母“a”。例如,Tobias, sewall.

    匹配任何单个字符(.)

    SELECT * FROM student WHERE password REGEXP ‘[b-g].[a]’ ;

    5,匹配任何不在方括号中列出的字符。([^abc]):

    给出所有不包含“j”或“z”的名称。例如: nerton, sewall

    SELECT * FROM student WHERE password REGEXP ‘[^jz]’ ;

    6,匹配单词结尾[[:>:]]:

    给出所有姓名以字符“志豪”结尾的学生。例子——陈志豪.

    SELECT * FROM student WHERE name REGEXP ‘志豪[[:>:]]’;

    image.png