2026-01-14 03:59:20
SQL中的LIKE运算符用于模式匹配和模糊搜索,通过指定通配符模式来筛选符合条件的行。
基本语法
SELECT 列名 FROM 表名 WHERE 列名 LIKE 模式通配符说明
%:匹配任意长度的字符(包括空字符)。
示例:LIKE 'j%' 匹配以 j 开头的字符串(如 John、James)。
_:匹配单个任意字符。
示例:LIKE 'J_n' 匹配 Jon、Jan,但不匹配 John。
[]:匹配方括号内的任意单个字符(部分数据库支持,如SQL Server)。
示例:LIKE '[a-c]%' 匹配以 a、b 或 c 开头的字符串。
[^]:匹配不包含方括号内字符的单个字符(部分数据库支持)。
示例:LIKE '[^0-9]%' 匹配不以数字开头的字符串。
常见用法
前缀搜索
SELECT * FROM customers WHERE name LIKE 'Jo%';匹配以 Jo 开头的姓名(如 John、Joseph)。
后缀搜索
SELECT * FROM products WHERE description LIKE '%computer%';匹配描述中包含 computer 的产品(如 Laptop computer、Computer accessories)。
包含搜索
SELECT * FROM orders WHERE order_id LIKE '%2023%';匹配订单ID中包含 2023 的记录。
精确匹配
SELECT * FROM users WHERE username LIKE 'admin';等价于 =,仅匹配完全相同的值(不区分大小写,如 Admin 也可能被匹配)。
注意事项
大小写敏感性:多数数据库(如MySQL)默认不区分大小写,但PostgreSQL等可能区分。可通过 LIKE BINARY(MySQL)或 ILIKE(PostgreSQL)调整。
性能影响:模式以 % 开头(如 LIKE '%text')会导致全表扫描,降低查询效率。建议优先使用前缀匹配(如 LIKE 'text%')。
转义字符:若需匹配通配符本身(如查找 % 字符),使用 ESCAPE 子句。例如:SELECT * FROM files WHERE name LIKE '%%%' ESCAPE '';匹配包含 % 的文件名。
示例扩展
-- 匹配第二个字符为 'a' 的姓名SELECT * FROM employees WHERE name LIKE '_a%';-- 匹配订单ID为字母开头后接数字(SQL Server)SELECT * FROM orders WHERE order_id LIKE '[A-Za-z][0-9]%';通过灵活组合通配符,LIKE运算符可实现高效的模糊查询,但需注意数据库兼容性和性能优化。