sql中的regexp与like区别
💖The Begin💖点点关注,收藏不迷路💖
1、REGEXP
- 用途:高级字符串匹配,使用正则表达式。
- 特点:灵活性强,能进行复杂模式匹配(如开头、结尾、字符集等)。
- 基本语法:
SELECT column_name FROM table_name WHERE column_name REGEXP'pattern';
其中,column_name是要进行匹配的列名,table_name是要查询的表名,pattern是要匹配的正则表达式模式。
- 正则表达式元素:
以下是一些常见的正则表达式元素及其含义:
.:匹配任意单个字符(除了换行符)。^:匹配字符串的开始位置。$:匹配字符串的结束位置。[]:指定一个字符集合,匹配其中的任意字符。例如,[abc]匹配a、b或c。[^]:指定一个不匹配的字符集合。例如,[^abc]不匹配a、b或c。|:逻辑“或”操作符,匹配左边的模式或右边的模式。例如,pattern1|pattern2匹配pattern1或pattern2。():用于组合模式,以便它们被视为一个整体。*:匹配前面的模式零次或多次。+:匹配前面的模式一次或多次。?:匹配前面的模式零次或一次。{n}:匹配前面的模式恰好n次。{n,}:匹配前面的模式至少n次。{n,m}:匹配前面的模式至少n次且不超过m次。
使用示例:
- 查找包含特定单词的行:
SELECT column_name FROM table_name WHERE column_name REGEXP'a'; - 查找以特定单词开头的行:
SELECT column_name FROM table_name WHERE column_name REGEXP'^a'; - 查找以特定单词结尾的行:
SELECT column_name FROM table_name WHERE column_name REGEXP'a$'; - 查找包含特定字符集合的行:
SELECT column_name FROM table_name WHERE column_name REGEXP'[abc]'; - 查找不包含特定字符集合的行:
SELECT column_name FROM table_name WHERE column_name REGEXP'[^abc]'; - 查找包含多个模式之一的行:
SELECT column_name FROM table_name WHERE column_name REGEXP'pattern1|pattern2';
2、LIKE
- 用途:简单字符串匹配,使用通配符
%和_。 - 特点:性能较好,适合简单模式匹配(如包含某字符)。
- 基本语法:
SELECT column_name FROM table_name WHERE column_name LIKE pattern;
其中,
pattern
可以包含文字字符、
%
(代表任意数量的字符,包括零个字符)和
_
(代表一个任意字符)。
使用示例:
- 查找包含特定文本的行:
找出
column_name
中包含 “text” 的所有行,你可以这样写:
SELECT*FROM table_name WHERE column_name LIKE'%a%';
- 查找以特定文本开头的行:如果你想找出
column_name以 “prefix” 开头的所有行,你可以这样写:SELECT*FROM table_name WHERE column_name LIKE'a%'; - 查找以特定文本结尾的行(注意:
LIKE本身不直接支持以特定文本结尾的匹配,但可以通过反转字符串和模式来实现):
例如,在 MySQL 中,可以使用
REVERSE()
函数(如果可用)来反转字符串和模式,然后进行匹配:
SELECT*FROM table_name WHERE REVERSE(column_name)LIKE REVERSE('%a');
这种方法可能不是所有数据库系统都支持的,且可能不如直接使用
REGEXP
或其他数据库特定的函数高效。
- 查找包含特定字符(但不是任意字符)的行:如果你想查找
column_name中第二个字符是 “a” 的所有行,你可以使用_来表示第一个任意字符,然后紧跟 “a”:SELECT*FROM table_name WHERE column_name LIKE'_a%';
注意事项:
LIKE匹配是区分大小写的,除非数据库或查询被设置为不区分大小写(这取决于数据库的实现和配置)。- 使用
%和_时要小心,因为它们会显著影响查询的性能,特别是当它们出现在模式的开始位置时。因为数据库需要扫描更多的行来找到匹配项。 - 考虑使用
REGEXP替代LIKE,以获得更强大的匹配能力和灵活性。但是,REGEXP可能会比LIKE更慢,特别是在处理大量数据时。
3、区别与选择
- 性能:
LIKE通常更快,REGEXP在处理复杂模式时可能较慢。 - 灵活性:
REGEXP更高,LIKE适合简单匹配。 - 选择:根据需求选择,复杂匹配用
REGEXP,简单匹配用LIKE。

💖The End💖点点关注,收藏不迷路💖
版权归原作者 Seal^_^ 所有, 如有侵权,请联系我们删除。