通配符在mysql中用于LIKE操作,%匹配任意数量字符,_匹配单个字符,可结合CONCAT函数动态构造查询条件,如select FROM users WHERE name LIKE CONCAT(‘张’, ‘%’)实现模糊匹配;也可与LOWER/UPPER函数配合实现不区分大小写的查询,如LOWER(role_name) LIKE ‘%admin%’;虽不能在REPLACE、SUBSTRING等函数中直接使用通配符进行模式匹配,但可通过先用LIKE筛选再处理的方式间接实现,如UPDATE users SET email = REPLACE(email, ‘@gmail.com’, ‘@example.com’) WHERE email LIKE ‘%@gmail.com%’,或SELECT FROM users WHERE SUBSTRING(phone, 1, 3) LIKE ’13_’;核心是通配符仅在LIKE中生效,函数用于准备或处理其输入输出,合理组合可提升查询灵活性。

MySQL中的通配符通常用于LIKE或NOT LIKE操作中,用来匹配字符串中的特定模式。常见的通配符有%(匹配任意数量字符,包括零个字符)和_(匹配单个字符)。这些通配符可以与MySQL的字符串函数结合使用,实现更灵活的数据查询和处理。
使用CONCAT函数拼接通配符
在实际查询中,如果需要动态构造包含通配符的匹配条件,可以使用CONCAT()函数将通配符与字段值或其他字符串连接起来。
- 例如,查找用户名以“张”开头的所有记录:
- 也可以在结尾添加通配符:
- 甚至可以在前后都加通配符:
SELECT * FROM users WHERE name LIKE CONCAT(‘%’, ‘明’, ‘%’); —— 包含“明”的名字
SELECT * FROM users WHERE name LIKE CONCAT(‘张’, ‘%’);
SELECT * FROM users WHERE name LIKE CONCAT(‘%’, ‘伟’); —— 匹配以“伟”结尾的名字
在REPLACE或SUBSTRING等函数中配合使用
虽然通配符不能直接在REPLACE()、SUBSTRING()等函数内部作为参数进行模式匹配,但可以通过先用LIKE筛选出目标数据,再对结果使用这些函数处理。
- 比如,先查出邮箱包含“@gmail”的用户,再替换域名:
- 或者提取部分字符串后再做模糊匹配:
UPDATE users SET email = REPLACE(email, ‘@gmail.com’, ‘@example.com’) WHERE email LIKE ‘%@gmail.com%’;
SELECT * FROM users WHERE SUBSTRING(phone, 1, 3) LIKE ’13_’; —— 匹配手机号前三位为13x的用户
结合LOWER/UPPER函数实现不区分大小写的匹配
有时候需要忽略大小写进行模糊查询,可以将字段值先通过LOWER()或UPPER()转换,再与带通配符的字符串比较。
- 例如,查找名称中包含“admin”的记录,不区分大小写:
- 这样即使数据是“Admin”、“ADMIN”也能被正确匹配。
SELECT * FROM roles WHERE LOWER(role_name) LIKE ‘%admin%’;
基本上就这些常见用法。MySQL不允许在普通字符串函数中直接使用正则式通配符,但在LIKE语句中结合函数构造动态模式是完全支持的。关键是要理解:通配符起作用的地方是LIKE操作,而函数是用来准备或处理这些操作的输入或输出。合理组合能大幅提升查询灵活性。