sql中的regexp与like区别实现

 更新时间:2024年09月30日 08:35:50   作者:Seal^_^  
本文详细介绍了正则表达式REGEXP和LIKE语句的用途,使用它们进行模式匹配,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1、REGEXP

  • 用途:高级字符串匹配,使用正则表达式。
  • 特点:灵活性强,能进行复杂模式匹配(如开头、结尾、字符集等)。
  • 基本语法
SELECT column_name FROM table_name WHERE column_name REGEXP 'pattern';

其中,column_name是要进行匹配的列名,table_name是要查询的表名,pattern是要匹配的正则表达式模式。

  • 正则表达式元素

以下是一些常见的正则表达式元素及其含义:

  • .:匹配任意单个字符(除了换行符)。
  • ^:匹配字符串的开始位置。
  • $:匹配字符串的结束位置。
  • []:指定一个字符集合,匹配其中的任意字符。例如,[abc]匹配abc
  • [^]:指定一个不匹配的字符集合。例如,[^abc]不匹配abc
  • |:逻辑“或”操作符,匹配左边的模式或右边的模式。例如,pattern1|pattern2匹配pattern1pattern2
  • ():用于组合模式,以便它们被视为一个整体。
  • *:匹配前面的模式零次或多次。
  • +:匹配前面的模式一次或多次。
  • ?:匹配前面的模式零次或一次。
  • {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

到此这篇关于sql中的regexp与like区别的文章就介绍到这了,更多相关sql regexp与like 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • SQL Server表分区删除详情

    SQL Server表分区删除详情

    这篇文章主要介绍了SQL Server表分区删除,删除分区又称为合并分区,简单地讲就是将多个分区的数据进行合并。现以表Sales.SalesOrderHeader作为示例,演示如何进行表分区删除。下面就和小编一起进入文章学习该内容吧
    2021-10-10
  • SQL Server日期加减函数DATEDIFF与DATEADD用法分析

    SQL Server日期加减函数DATEDIFF与DATEADD用法分析

    这篇文章主要介绍了SQL Server日期加减函数DATEDIFF与DATEADD用法,结合分析SQL Server使用DATEDIFF与DATEADD函数获取常见的周、月、天等日期相关运算技巧,需要的朋友可以参考下
    2017-03-03
  • SQL Server如何建表的详细图文教程

    SQL Server如何建表的详细图文教程

    创建表之前一定要先了解数据类型与约束,这样我们才能创建正确的表,下面这篇文章主要给大家介绍了关于SQL Server如何建表的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • SQL优化技巧指南

    SQL优化技巧指南

    这篇文章主要介绍了SQL优化的方方面面的技巧,以及应注意的地方,需要的朋友可以参考下
    2014-08-08
  • SQL语句中不同的连接JOIN及join的用法

    SQL语句中不同的连接JOIN及join的用法

    为了从两个表中获取数据,我们有时会用JOIN将两个表连接起来。本文给大家较详细的介绍了SQL语句中不同的连接JOIN及join的用法,感兴趣的朋友跟随小编一起看看吧
    2018-10-10
  • SQL Server数据库错误829的修复办法

    SQL Server数据库错误829的修复办法

    SQL Server 错误 829 是与 SQL Server 页面相关的错误,当用户尝试自动修复主数据库中的页面,但由于某种原因而失败时,可能会发生 SQL Server 错误 829,所以本文给大家介绍了如何修复 SQL Server 数据库错误 829,需要的朋友可以参考下
    2024-08-08
  • SQL SERVER存储过程用法详解

    SQL SERVER存储过程用法详解

    本文详细讲解了SQL SERVER存储过程用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • 获取星期几的名称

    获取星期几的名称

    两个自定义函数,一个是返回一个Table,另一个是直接返回名称
    2012-01-01
  • SQL Server页类型汇总+疑问汇总

    SQL Server页类型汇总+疑问汇总

    这篇文章主要介绍了SQL Server中页类型的相关资料,需要的朋友可以参考下
    2014-03-03
  • sql语句实现四种九九乘法表

    sql语句实现四种九九乘法表

    本文给大家分享了四种九九乘法表的实现,本文附有运行结果,代码写的简单明了,需要的朋友一起来学习吧。
    2015-08-08

最新评论