REGEXP使用

lishihuan大约 2 分钟

REGEXP使用

两个场景:

  • WHERE 里用来筛选 的 REGEXP
  • SELECT 里用来归类 的 REGEXP

一、REGEXP 核心一句话

字段 REGEXP '规则' 只要字段内容符合规则,就返回真(匹配成功)

核心符号(必记)

  • | = 或者(包含任意一个就算)
  • ^ = 以...开头
  • $ = 以...结尾
  • [] = 包含其中任意一个字符

二、场景1:WHERE 中筛选数据(过滤用)

1)包含任意关键词

需求:查询用户名包含 小明、小红、小李 任意一个

SELECT * FROM user
WHERE username REGEXP '小明|小红|小李';

匹配:小明、王小明、小红同学、小李abc

2)以某内容开头

需求:手机号 以13开头

SELECT * FROM user
WHERE phone REGEXP '^13';

3)以某内容结尾

需求:地址 以‘公司’结尾

SELECT * FROM user
WHERE address REGEXP '公司$';

4)包含数字

SELECT * FROM user
WHERE username REGEXP '[0-9]';

5)包含大写字母

SELECT * FROM user
WHERE username REGEXP '[A-Z]';

三、场景2:SELECT 中归类(你最需要的!)

需求:

只要字段里出现任意一个关键词,就自动归类为 XX

示例:用户标签智能分类

SELECT
    username,
    phone,
    CASE
        WHEN username REGEXP '小明|小红|小李' THEN '内部员工'
        WHEN phone REGEXP '^13|^15'             THEN '移动用户'
        WHEN username REGEXP 'test|demo'        THEN '测试账号'
        ELSE '普通用户'
    END AS user_type
FROM user;
效果
  • 只要 username 出现小明/小红/小李 → 标为【内部员工】
  • 只要 phone 以13或15开头 → 标为【移动用户】
  • 只要 username 含 test/demo → 标为【测试账号】
通用模板
CASE
    WHEN 字段 REGEXP '关键词1|关键词2|关键词3' THEN '分类A'
    WHEN 字段 REGEXP '关键词4|关键词5'         THEN '分类B'
    WHEN 字段 REGEXP '开头内容'                THEN '分类C'
    ELSE '其他'
END AS 分类名称

四、最精简笔记版(可直接抄)

  1. REGEXP:字符串正则匹配,比 LIKE 强得多
  2. 符号:
    • A|B|C = 包含A或B或C
    • ^A = 以A开头
    • A$ = 以A结尾
  3. 两种用法:
    • WHERE:筛选符合条件的数据
    • SELECT + CASE:根据关键词自动归类
  4. 经典句式:
    WHERE 字段 REGEXP 'a|b|c'
    
    CASE WHEN 字段 REGEXP 'a|b' THEN '分类' END
    

这样你WHERE 筛选 + SELECT 归类两个例子都齐了,不多不少,正好是你想要的。

FIND_IN_SET