SQL 中的通配符是用于在数据库中文本数据中搜索模式的特殊字符。 它们主要与 LIKE
运算符在 WHERE
子句中一起使用,以根据部分匹配过滤结果。 两个最常见的通配符是 %
(百分号)和 _
(下划线)。 %
表示零个或多个字符,而 _
表示恰好一个字符。 例如,WHERE name LIKE 'J%'
查找所有以“J”开头的名称,而 WHERE code LIKE 'A_1'
匹配诸如 “A21” 或 “AX1” 之类的数值,其中第二个字符可以是任何字符。 当无法进行精确匹配或不切实际时,这些通配符可以实现灵活的查询。
要有效地使用通配符,请将它们与特定字符组合以缩小结果范围。 例如,WHERE email LIKE '%@gmail.com'
通过匹配 "@gmail.com" 之前的任何文本来查找所有 Gmail 地址。 您也可以在单个模式中使用多个通配符:WHERE product_code LIKE 'T_SH__T%'
可能匹配 “TEST_123” 或 "T_SH8T_2023"。 如果您需要搜索通配符的字面量(例如数据中的实际 %
),请使用 ESCAPE
关键字。 例如,WHERE note LIKE '%25%%' ESCAPE '!'
使用 !
作为转义字符来查找包含 "%25%" 的字符串,其中 !%
表示字面量 %
。 请注意,过度使用通配符,尤其是前导 %
(例如,LIKE '%son'
),会降低查询速度,因为索引可能无法得到有效利用。
通配符最适合简单的文本模式。 对于复杂的搜索,请考虑 MySQL 或 PostgreSQL 等数据库中提供的全文搜索功能。 一个实际的例子是过滤电话号码:WHERE phone LIKE '(___) ___%'
匹配美国风格的号码,例如 "(123) 456-7890"。 始终使用边缘情况(例如空字符串或特殊字符)测试模式。 请注意区分大小写,这取决于数据库的排序规则设置 - LIKE 'a%'
在区分大小写与不区分大小写的环境中可能会有不同的行为。 除非必要,否则避免使用前导通配符,并使用约束或索引策略来优化常用查询模式的性能。