12、LIKE 子句 字符串模糊匹配

1、LIKE 子句

用于在 WHERE 条件中进行模式匹配(pattern matching)的运算符,常用于对字符串类型的列进行模糊查询

它通常配合通配符使用,以查找符合特定模式的数据。

语法:  

SELECT 列名 FROM 表名 WHERE 列名 LIKE '模式';
  • %:匹配任意长度的字符序列(包括空序列),如 LIKE 'N%' 可筛选以 N 开头的字符串   

  • _:匹配任意单个字符,如 LIKE '_am' 可以匹配 "Tam"、"Mam" 等,精确位置匹配

  • [] :用于匹配指定范围内的单个字符,例如 LIKE '[A-C]%' 会匹配以 A、B 或 C 开头的字符串

例子:

使用 % 通配符

-- 匹配以 'John' 开头的所有名字
SELECT * FROM users WHERE name LIKE 'John%';
-- 匹配以John开头的name字段, Johnny, Johnson
-- 不匹配: MrJohn, ajohn

-- 匹配以 'son' 结尾的所有名字
SELECT * FROM users WHERE name LIKE '%son';
-- 匹配: Johnson, Jackson, Wilson
-- 不匹配: sonny, Andersonx

-- 匹配包含 'admin' 的所有字符串
SELECT * FROM users WHERE role LIKE '%admin%';
-- 匹配: admin, administrator, sysadmin, admin_user

-- 匹配以 'A' 开头,以 'Z' 结尾的字符串
SELECT * FROM products WHERE name LIKE 'A%Z';
-- 匹配: AMAZ, A123Z, AQuickZ
-- 不匹配: AZB, A Z, A_

-- 匹配包含 'data' 且以 'base' 结尾
SELECT * FROM systems WHERE name LIKE '%data%base';
-- 匹配: database, mydatabase, databasenamebase

使用 _ 通配符

-- 匹配正好5个字符的名字
SELECT * FROM users WHERE name LIKE '_____';
-- 匹配: Alice, Bob12, User1
-- 不匹配: Al, Bob, User123

-- 匹配第二个字符是 'o' 的所有名字
SELECT * FROM users WHERE name LIKE '_o%';
-- 匹配: John, Robert, coding
-- 不匹配: Bob, admin, root

-- 匹配第一个字符任意,后面是 'at' 的所有单词
SELECT * FROM words WHERE word LIKE '_at';
-- 匹配: cat, bat, hat, rat
-- 不匹配: at, chat, batch

-- 复杂的模式匹配
SELECT * FROM products WHERE code LIKE 'A_B_C%';
-- 匹配: A1B2C3, AxByCzProduct, A-B-C-D
-- 不匹配: ABC, A_B_C, A1C2B3

复杂模式匹配

-- 匹配以 'user' 开头,后面跟一个数字,然后任意字符
SELECT * FROM accounts WHERE username LIKE 'user_%';
-- 匹配: user1, user2admin, user_test
-- 不匹配: user, users, adminuser1

-- 匹配包含数字的电子邮件
SELECT * FROM users WHERE email LIKE '%[0-9]%@%';
-- 匹配: user123@gmail.com, john2023@company.com
-- 不匹配: john@gmail.com, admin@test.org

-- 匹配特定格式的电话号码
SELECT * FROM contacts WHERE phone LIKE '+1-___-___-____';
-- 匹配: +1-123-456-7890, +1-555-123-4567
-- 不匹配: 123-456-7890, +1-12-345-6789

-- 匹配文件扩展名
SELECT * FROM files WHERE filename LIKE '%.pdf' OR filename LIKE '%.doc%';
-- 匹配: document.pdf, manual.doc, guide.docx
-- 不匹配: image.png, data.txt

2、NOT LIKE 字句

排除特定模式

-- 排除所有以 'test' 开头的用户
SELECT * FROM users WHERE username NOT LIKE 'test%';

-- 排除包含 'admin' 的角色
SELECT * FROM users WHERE role NOT LIKE '%admin%';

-- 排除单个字符的缩写
SELECT * FROM products WHERE code NOT LIKE '_';

-- 排除临时文件(以 ~ 或 .tmp 结尾)
SELECT * FROM documents WHERE filename NOT LIKE '%~' AND filename NOT LIKE '%.tmp';

-- 复杂的排除逻辑
SELECT * FROM logs 
WHERE message NOT LIKE '%ERROR%' 
  AND message NOT LIKE '%FAILED%'
  AND message NOT LIKE '%CRITICAL%';

 

 
 
 
posted @ 2025-11-18 14:18  chao_xiong  阅读(7)  评论(0)    收藏  举报