广告位联系
返回顶部
分享到

sql中的regexp与like区别实现介绍

MsSql 来源:互联网 作者:佚名 发布时间:2024-10-03 21:41:36 人浏览
摘要

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

1、REGEXP

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

1

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次。

使用示例:

查找包含特定单词的行:

1

SELECT column_name FROM table_name WHERE column_name REGEXP 'a';

查找以特定单词开头的行:

1

SELECT column_name FROM table_name WHERE column_name REGEXP '^a';

查找以特定单词结尾的行:

1

SELECT column_name FROM table_name WHERE column_name REGEXP 'a$';

查找包含特定字符集合的行:

1

SELECT column_name FROM table_name WHERE column_name REGEXP '[abc]';

查找不包含特定字符集合的行:

1

SELECT column_name FROM table_name WHERE column_name REGEXP '[^abc]';

查找包含多个模式之一的行:

1

SELECT column_name FROM table_name WHERE column_name REGEXP 'pattern1|pattern2';

2、LIKE

  • 用途:简单字符串匹配,使用通配符%和_。

  • 特点:性能较好,适合简单模式匹配(如包含某字符)。

  • 基本语法:

1

SELECT column_name FROM table_name WHERE column_name LIKE pattern;

其中,pattern 可以包含文字字符、%(代表任意数量的字符,包括零个字符)和 _(代表一个任意字符)。

使用示例:

查找包含特定文本的行:

找出 column_name 中包含 “text” 的所有行,你可以这样写:

1

SELECT * FROM table_name WHERE column_name LIKE '%a%';

查找以特定文本开头的行:

如果你想找出 column_name 以 “prefix” 开头的所有行,你可以这样写:

1

SELECT * FROM table_name WHERE column_name LIKE 'a%';

查找以特定文本结尾的行(注意:LIKE 本身不直接支持以特定文本结尾的匹配,但可以通过反转字符串和模式来实现):

例如,在 MySQL 中,可以使用 REVERSE() 函数(如果可用)来反转字符串和模式,然后进行匹配:

1

SELECT * FROM table_name WHERE REVERSE(column_name) LIKE REVERSE('%a');

这种方法可能不是所有数据库系统都支持的,且可能不如直接使用 REGEXP 或其他数据库特定的函数高效。

查找包含特定字符(但不是任意字符)的行:

如果你想查找 column_name 中第二个字符是 “a” 的所有行,你可以使用 _ 来表示第一个任意字符,然后紧跟 “a”:

1

SELECT * FROM table_name WHERE column_name LIKE '_a%';

注意事项:

  • LIKE 匹配是区分大小写的,除非数据库或查询被设置为不区分大小写(这取决于数据库的实现和配置)。
  • 使用 % 和 _ 时要小心,因为它们会显著影响查询的性能,特别是当它们出现在模式的开始位置时。因为数据库需要扫描更多的行来找到匹配项。
  • 考虑使用 REGEXP 替代 LIKE,以获得更强大的匹配能力和灵活性。但是, REGEXP 可能会比 LIKE 更慢,特别是在处理大量数据时。

3、区别与选择

  • 性能:LIKE通常更快,REGEXP在处理复杂模式时可能较慢。
  • 灵活性:REGEXP更高,LIKE适合简单匹配。
  • 选择:根据需求选择,复杂匹配用REGEXP,简单匹配用LIKE。

版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • sql中的regexp与like区别实现介绍
    1、REGEXP 用途:高级字符串匹配,使用正则表达式。 特点:灵活性强,能进行复杂模式匹配(如开头、结尾、字符集等)。 基本语法: 1
  • SQLServer日志收缩的两种方法

    SQLServer日志收缩的两种方法
    在日常运维中,有时会遇到The transaction log for database xxxx is full due to ACTIVE_TRANSACTION.这样的报错信息。 此错误消息表明:数据库的事务日志文
  • Sql Server查询卡顿的排查方法

    Sql Server查询卡顿的排查方法
    本篇为理论知识的分析以及对症下药,前阵子发生过Bug,后通过迁移服务器以及数据库最终才解决问题,但是细想当时可能是因为碎片或者
  • sql server安装及使用全流程

    sql server安装及使用全流程
    一、安装SQL Server 1.到微软官网下载SQL Server Developer版本,现在的最新版本是SQL Server 2019 Developer。微软官网传送门:点击此处直达 2.下载完成
  • SQL Povit函数使用及实例

    SQL Povit函数使用及实例
    PIVOT函数常用于数据的行转列,同时也可以用此函数实现类似于Excel中的数据透视表的效果。 PIVOT函数 PIVOT 函数的基本语法如下: 1 2 3 4 5
  • Navicat连接SQL server出现:[IM002] [Microsoft][ODBC 驱动

    Navicat连接SQL server出现:[IM002] [Microsoft][ODBC 驱动
    问题 解决方法 一 找到Navicat的安装路径,然后找到sqlncli_x64.msi文件并安装,安装成功后重启Navicat重新进行连接,看是否成功。 解决方法 二
  • sql server实现图片的存入和读取的流程介绍

    sql server实现图片的存入和读取的流程介绍
    首先提醒一下,无论是将图片存入数据库,还是从数据库中读取,都是采用流的形式进行,虽然,在数据库中,存储图片的类型是Image,但是
  • Sql中的like的用法及示例操作介绍
    Sql中的like的用法 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今
  • 对SQL Server中敏感数据进行加密解密的操作方法
    为什么需要对敏感数据进行加密? 近几年有不少关于个人数据泄露的新闻(个人数据通常包含如姓名、地址、身份证号码、财务信息等),
  • SSMS中出现两个相同的服务器名称的问题解决

    SSMS中出现两个相同的服务器名称的问题解决
    在将SQL Server 2019更新为SQL Server 2022后,或者是在更新安装SQL Server Management Studio工具后,在SSMS的【连接到服务器】页面,有时候可能会出现多
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计