SQL通配符

SQL 通配符详解

SQL 通配符是用于在 LIKE 操作符中匹配文本模式的特殊字符,主要用于模糊查询。它们通常与 WHERE 子句一起使用,特别适合在不确定完整字符串或需要部分匹配时使用。

主要通配符

1. % 百分号

  • 功能:匹配任意数量(包括零个)的任意字符
  • 示例:
    sql
      -- 查找所有以 'A' 开头的名字
      SELECT * FROM employees WHERE first_name LIKE 'A%';
       
      -- 查找包含 'son' 的名字
      SELECT * FROM employees WHERE last_name LIKE '%son%';
       
      -- 查找以 'n' 结尾的名字
      SELECT * FROM employees WHERE last_name LIKE '%n';

2. _ 下划线

  • 功能:匹配单个任意字符
  • 示例:
    sql
      -- 查找第二个字母是 'a' 的名字
      SELECT * FROM employees WHERE first_name LIKE '_a%';
       
      -- 查找正好5个字母且以 's' 结尾的名字
      SELECT * FROM employees WHERE last_name LIKE '____s';

3. [] 方括号(特定数据库支持)

  • 功能:匹配括号内的任意单个字符(主要用于 SQL Server)
  • 示例:
    sql
      -- SQL Server 示例:查找第一个字母是 A、B 或 C 的名字
      SELECT * FROM employees WHERE first_name LIKE '[ABC]%';
       
      -- 查找第二个字母是 a、e 或 i 的名字
      SELECT * FROM employees WHERE first_name LIKE '_[aei]%';

4. [^] 或 [!](特定数据库支持)

  • 功能:匹配不在括号内的任意单个字符(SQL Server)
  • 示例:
    sql
      -- SQL Server 示例:查找第一个字母不是 A、B 或 C 的名字
      SELECT * FROM employees WHERE first_name LIKE '[^ABC]%';

转义通配符

如果需要搜索包含通配符本身的字符串(如查找包含 % 或 _ 的值),需要使用 ESCAPE 子句:

sql
  -- 查找包含下划线 '_' 的名字
  SELECT * FROM employees WHERE first_name LIKE '%\_%' ESCAPE '\';
   
  -- 查找包含百分号 '%' 的名字
  SELECT * FROM employees WHERE first_name LIKE '%\%%' ESCAPE '\';

不同数据库的通配符支持

通配符MySQL/MariaDBPostgreSQLSQL ServerOracle
% 支持 支持 支持 支持
_ 支持 支持 支持 支持
[] 不支持 不支持 支持 不支持
[^] 不支持 不支持 支持 不支持

性能考虑

  1. 避免前导通配符:LIKE '%abc' 或 LIKE '_abc' 通常无法使用索引,可能导致全表扫描
  2. 后缀通配符更高效:LIKE 'abc%' 可以利用索引(如果列上有索引)
  3. 考虑全文索引:对于复杂的文本搜索需求,考虑使用全文索引功能

实际应用示例

1. 查找特定格式的电话号码

sql
  -- 查找格式为 (XXX) XXX-XXXX 的电话号码
  SELECT * FROM customers WHERE phone LIKE '(___) ___-____';

2. 查找特定模式的电子邮件

sql
  -- 查找 gmail 或 yahoo 邮箱
  SELECT * FROM users WHERE email LIKE '%@gmail.com' OR email LIKE '%@yahoo.com';

3. 查找产品代码中的特定模式

sql
  -- 查找产品代码以 'AB' 开头,第三个字符是数字的产品
  SELECT * FROM products WHERE product_code LIKE 'AB_[0-9]%';

通配符是SQL中非常有用的功能,但应谨慎使用以避免性能问题。在可能的情况下,尽量使用更精确的匹配条件。

posted @ 2025-07-13 15:53  Yu-potato  阅读(35)  评论(0)    收藏  举报