2022-06-23 14:19:15
LIKE是SQL中实现模糊查询的核心操作符,通过通配符%和_匹配字符串模式,适用于简单到中等复杂度的场景。 以下是具体技巧与进阶用法:
一、核心通配符及其用途百分号(%)
用途:匹配零个、一个或多个任意字符(包括空字符)。
示例:
'abc%':匹配以abc开头的字符串(如abc、abcd)。
'%xyz':匹配以xyz结尾的字符串(如xyz、123xyz)。
'%mno%':匹配包含mno的字符串(如amno、mno_p)。
'%':匹配所有非NULL字符串(实际使用需结合其他条件)。
下划线(_)
用途:匹配单个任意字符,适用于固定长度或位置匹配。
示例:
'a_c':匹配以a开头、c结尾且中间仅一个字符的字符串(如abc、a1c)。
'___':匹配长度为3的字符串(如123、abc)。
'_9________':匹配11位字符且第二位为9的字符串(如A9123456789)。
通配符组合使用
通过混合%和_实现更精确的字符数量与位置控制。
示例:
查找以Data开头、后跟至少两个字符且以_Report结尾的文档名:SELECT doc_name FROM documents WHERE doc_name LIKE 'Data__%_Report';
转义特殊字符(ESCAPE子句)
当数据中包含%或_时,需用ESCAPE指定转义符(如)。
示例:
匹配产品编号100%OFF:SELECT product_code FROM products WHERE product_code LIKE '100%OFF' ESCAPE '';
反向匹配(NOT LIKE)
排除符合特定模式的数据,常用于数据清洗。
示例:
查找产品名中不包含测试的记录:SELECT product_name FROM products WHERE product_name NOT LIKE '%测试%';
多条件组合(AND/OR)
结合逻辑操作符实现复杂筛选。
示例:
查找以A开头、包含B但不包含C的产品:SELECT product_name FROM products WHERE product_name LIKE 'A%' AND product_name LIKE '%B%' AND product_name NOT LIKE '%C%';
LIKE的适用场景
优势:语法简单,性能较高(尤其适合简单模式)。
典型用例:
匹配开头/结尾(如'苹果%')。
包含关键词(如'%手机%')。
固定长度或位置匹配(如'__5__')。
REGEXP/RLIKE的适用场景
优势:支持正则表达式,适合复杂模式(如重复字符、分组、字符类)。
典型用例:
匹配邮箱格式(如'^[w.-]+@[w.-]+.w+$')。
匹配重复字符(如'a{3,}'匹配至少3个a)。
性能考量:正则表达式通常比LIKE更消耗资源,需谨慎使用于大数据量场景。
通过灵活运用这些技巧,可显著提升SQL模糊查询的效率与准确性。