LIKE是SQL中用于字符串模糊匹配的关键字,配合%(匹配零个或多个字符)和_(匹配单个字符)通配符实现模式查询,须在WHERE子句中使用,仅适用于文本字段,注意转义、大小写敏感性及前导%导致的性能问题。

在SQL中,LIKE 是用于模糊匹配字符串的关键字,配合通配符可灵活查找符合模式的文本数据。核心在于理解通配符含义及使用场景,避免常见误区。
LIKE 基本语法与两个关键通配符
LIKE 必须搭配 WHERE 子句使用,语法为:column_name LIKE pattern。它只支持字符串列,对数字或日期需先转为字符串(如用 CAST 或 CONVERT)。
常用通配符有两个:
-
%:匹配零个、一个或多个任意字符(包括空格)。例如
'a%'匹配以 a 开头的所有字符串;'%ing'匹配以 ing 结尾的词;'%or%'匹配中间含 or 的任意位置。 -
_(下划线):匹配且仅匹配一个任意单字符。例如
'b_t'可匹配bat、bet、bit,但不匹配bt或bott。
转义特殊字符:当搜索内容含 % 或 _ 本身时
若要查找真实存在的百分号或下划线(比如查字段值为 '100%' 或 'user_name'),需定义转义字符并用 ESCAPE 指定:
-
WHERE name LIKE '100!%' ESCAPE '!'—— 查找以100%结尾的记录 -
WHERE username LIKE 'user!_name' ESCAPE '!'—— 查找值为user_name的记录 - 转义符可以是任意单字符(如
\、#),只要不在被查内容中频繁出现即可
大小写敏感性与性能注意事项
LIKE 是否区分大小写取决于数据库配置和字段排序规则(collation):
- MySQL 默认不区分(除非列用
BINARY或指定_bin排序规则) - PostgreSQL 默认区分,可用
ILIKE实现不区分大小写的匹配 - SQL Server 和 Oracle 依数据库默认排序规则而定,建议显式用
UPPER()或LOWER()统一处理,如:WHERE UPPER(name) LIKE UPPER('%apple%')
性能方面:LIKE 'abc%' 可利用索引(前导匹配),而 LIKE '%abc' 或 LIKE '%abc%' 通常无法使用索引,大数据量时可能显著变慢。必要时考虑全文索引或 FULLTEXT 搜索替代。
结合 NOT、AND/OR 及其他条件增强查询能力
LIKE 可与其他逻辑操作符自由组合:
- 排除某类模式:
WHERE product_name NOT LIKE '%test%' - 多条件并列:
WHERE name LIKE 'A%' AND status = 'active' - 匹配多个固定选项之一(非正则):
WHERE city LIKE 'New%' OR city LIKE 'Los%';更简洁写法(部分数据库支持):WHERE city SIMILAR TO '(New|Los)%'(PostgreSQL)或用正则函数如REGEXP(MySQL 8.0+)
注意:不同数据库对 LIKE 的扩展支持不同,例如 SQLite 不支持 ESCAPE,而 SQL Server 支持 [char_list] 范围匹配(如 '[A-C]at' 匹配 Bat、Cat),使用前请查阅对应文档。










