首页 > 其他分享 >openGauss学习笔记-24 openGauss 简单数据管理-模式匹配操作符

openGauss学习笔记-24 openGauss 简单数据管理-模式匹配操作符

时间:2023-07-29 11:33:11浏览次数:37  
标签:24 abc 匹配 LIKE 正则表达式 数据管理 openGauss row

openGauss学习笔记-24 openGauss 简单数据管理-模式匹配操作符

数据库提供了三种独立的实现模式匹配的方法:SQL LIKE操作符、SIMILAR TO操作符和POSIX-风格的正则表达式。除了这些基本的操作符外,还有一些函数可用于提取或替换匹配子串并在匹配位置分离一个串。

24.1 LIKE

描述:判断字符串是否能匹配上LIKE后的模式字符串。如果字符串与提供的模式匹配,则LIKE表达式返回为真(NOT LIKE表达式返回假),否则返回为假(NOT LIKE表达式返回真)。

匹配规则:

  1. 此操作符只有在它的模式匹配整个串的时候才能成功。如果要匹配在串内任何位置的序列,该模式必须以百分号开头和结尾。

  2. 下划线 (_)代表(匹配)任何单个字符; 百分号(%)代表任意串的通配符。

  3. 要匹配文本里的下划线或者百分号,在提供的模式里相应字符必须前导逃逸字符。逃逸字符的作用是禁用元字符的特殊含义,缺省的逃逸字符是反斜线,也可以用ESCAPE子句指定一个不同的逃逸字符。

  4. 要匹配逃逸字符本身,写两个逃逸字符。例如要写一个包含反斜线的模式常量,那你就要在SQL语句里写两个反斜线。

    img说明: 参数standard_conforming_strings设置为off时,在文串常量中写的任何反斜线都需要被双写。因此,写一个匹配单个反斜线的模式实际上要在语句里写四个反斜线(你可以通过用ESCAPE选择一个不同的逃逸字符来避免这种情况,这样反斜线就不再是LIKE的特殊字符了。但仍然是字符文本分析器的特殊字符,所以你还是需要两个反斜线)。 在兼容MYSQL数据模式时,您也可以通过写ESCAPE ''的方式不选择逃逸字符,这样可以有效地禁用逃逸机制,但是没有办法关闭下划线和百分号在模式中的特殊含义。

  5. 关键字ILIKE可以用于替换LIKE,区别是LIKE大小写敏感,ILIKE大小写不敏感。

  6. 操作符等效于LIKE,操作符*等效于ILIKE。

示例:

openGauss=# SELECT 'abc' LIKE 'abc' AS RESULT;
 result
-----------
 t
(1 row)
openGauss=# SELECT 'abc' LIKE 'a%' AS RESULT;
 result
-----------
 t
(1 row)
openGauss=# SELECT 'abc' LIKE '_b_' AS RESULT;
 result
-----------
 t
(1 row)
openGauss=# SELECT 'abc' LIKE 'c' AS RESULT;
 result
-----------
 f
(1 row)

24.2 SIMILAR TO

描述:SIMILAR TO操作符根据自己的模式是否匹配给定串而返回真或者假。他和LIKE非常类似,只不过他使用SQL标准定义的正则表达式理解模式。

匹配规则:

  1. 和LIKE一样,此操作符只有在它的模式匹配整个串的时候才能成功。如果要匹配在串内任何位置的序列,该模式必须以百分号开头和结尾。

  2. 下划线 (_)代表(匹配)任何单个字符; 百分号(%)代表任意串的通配符。

  3. SIMILAR TO也支持下面这些从POSIX正则表达式借用的模式匹配元字符。

    元字符 含义
    | 表示选择(两个候选之一)
    * 表示重复前面的项零次或更多次
    + 表示重复前面的项一次或更多次
    ? 表示重复前面的项零次或一次
    {m} 表示重复前面的项刚好m次
    {m,} 表示重复前面的项m次或更多次
    {m,n} 表示重复前面的项至少m次并且不超过n次
    () 把多个项组合成一个逻辑项
    [...] 声明一个字符类,就像POSIX正则表达式一样
  4. 前导逃逸字符可以禁止所有这些元字符的特殊含义。逃逸字符的使用规则和LIKE一样。

示例:

openGauss=# SELECT 'abc' SIMILAR TO 'abc' AS RESULT;
 result
-----------
 t
(1 row)
openGauss=# SELECT 'abc' SIMILAR TO 'a' AS RESULT;
 result
-----------
 f
(1 row)
openGauss=# SELECT 'abc' SIMILAR TO '%(b|d)%' AS RESULT;
 result
-----------
 t
(1 row)
openGauss=# SELECT 'abc' SIMILAR TO '(b|c)%'  AS RESULT;
 result
-----------
 f
(1 row)

24.3 POSIX正则表达式

描述:正则表达式是一个字符序列,它是定义一个串集合(一个正则集)的缩写。 如果一个串是正则表达式描述的正则集中的一员时, 我们就说这个串匹配该正则表达式。 POSIX正则表达式提供了比LIKE和SIMILAR TO操作符更强大的含义。表1列出了所有可用于POSIX正则表达式模式匹配的操作符。

表 1 正则表达式匹配操作符

操作符 描述 例子
~ 匹配正则表达式,大小写敏感 'thomas' ~ '.thomas.'
~* 匹配正则表达式,大小写不敏感 'thomas' ~* '.Thomas.'
!~ 不匹配正则表达式,大小写敏感 'thomas' !~ '.Thomas.'
!~* 不匹配正则表达式,大小写不敏感 'thomas' !~* '.vadim.'

匹配规则:

  1. 与LIKE不同,正则表达式允许匹配串里的任何位置,除非该正则表达式显式地挂接在串的开头或者结尾。

  2. 除了上文提到的元字符外, POSIX正则表达式还支持下列模式匹配元字符。

    元字符 含义
    ^ 表示串开头的匹配
    $ 表示串末尾的匹配
    . 匹配任意单个字符

示例:

openGauss=#  SELECT 'abc' ~ 'Abc' AS RESULT;
result 
--------
 f
(1 row)
openGauss=# SELECT 'abc' ~* 'Abc' AS RESULT;
 result 
--------
 t
(1 row)
openGauss=# SELECT 'abc' !~ 'Abc' AS RESULT;
 result 
--------
 t
(1 row)
openGauss=# SELECT 'abc'!~* 'Abc' AS RESULT;
 result 
--------
 f
(1 row)
openGauss=# SELECT 'abc' ~ '^a' AS RESULT;
 result 
--------
 t
(1 row)
openGauss=# SELECT 'abc' ~ '(b|d)'AS RESULT;
 result 
--------
 t
(1 row)
openGauss=# SELECT 'abc' ~ '^(b|c)'AS RESULT;
 result 
--------
 f
(1 row)

虽然大部分的正则表达式搜索都能很快地执行,但是正则表达式仍可能被人为地弄成需要任意长的时间和任意量的内存进行处理。不建议从非安全模式来源接受正则表达式搜索模式,如果必须这样做,建议加上语句超时限制。使用SIMILAR TO模式的搜索具有同样的安全性危险, 因为SIMILAR TO提供了很多和POSIX-风格正则表达式相同的能力。LIKE搜索比其他两种选项简单得多,因此在接受非安全模式来源搜索时要更安全些。

标签:24,abc,匹配,LIKE,正则表达式,数据管理,openGauss,row
From: https://blog.51cto.com/u_237826/6891374

相关文章

  • VirtualEnv 20.24.0 发布 | 《Linux就该这么学》
    VirtualEnv20.24.0现已发布,VirtualEnv用于在一台机器上创建多个独立的Python运行环境,可隔离项目之间的第三方包依赖,为部署应用提供方便,把开发环境的虚拟环境打包到生产环境即可,不需要在服务器上再折腾一翻。新版更新内容如下:release20.23.1#2590修复CI#2593......
  • VirtualEnv 20.24.0 发布 | 《Linux就该这么学》
    VirtualEnv20.24.0现已发布,VirtualEnv用于在一台机器上创建多个独立的Python运行环境,可隔离项目之间的第三方包依赖,为部署应用提供方便,把开发环境的虚拟环境打包到生产环境即可,不需要在服务器上再折腾一翻。新版更新内容如下:release20.23.1#2590修复CI#2593......
  • openGauss学习笔记-23 openGauss 简单数据管理-时间/日期函数和操作符
    openGauss学习笔记-23openGauss简单数据管理-时间/日期函数和操作符23.1时间日期操作符用户在使用时间和日期操作符时,对应的操作数请使用明确的类型前缀修饰,以确保数据库在解析操作数的时候能够与用户预期一致,不会产生用户非预期的结果。比如下面示例没有明确数据类型就会出......
  • ChatGPT狂飙240天,欢迎来到AIGC时代!
    2023年的互联网,针对GPT的讨论已经蔚然成风,相关话题热度如火箭一般蹿升。生成式预训练模型(GenerativePre-trainedTransformer,简称GPT)是人工智能AI子领域自然语言处理中的一个重要技术,由OpenAI团队开发。GPT是一种基于互联网的、可用数据来训练的、文本生成的深度学习模型,并在不同......
  • 扬州高防服务器租用,扬州BGP高防IP段43.248.184.X
    专业做扬州高防BGP服务器,大带宽、高防御、低延迟、稳定流畅、免费测试。扬州数据中心介绍1、运河西路机房237号数据中心,机柜数量400-500个,位于4楼6楼,每层200多个标准机柜,机柜42U。2、维扬路107号数据中心,400-500个机柜,位于1楼2楼,每层200多个标准机柜。3、扬子江南路9号电信数据中心......
  • Acrobat Pro DC 2023 for Mac(PDF编辑器) 2023.003.20244 中文版
    AcrobatProDC2023forMac是一款功能强大的PDF编辑器软件,由AdobeSystems开发。它为Mac用户提供了广泛的PDF处理工具和功能,使用户能够创建、编辑、转换和共享高质量的PDF文件。以下是AcrobatProDC2023forMac的一些主要特点和功能:PDF编辑:AcrobatProDC允许用户对PDF文件进......
  • 最后的组合:K8s 1.24 基于 Hekiti 实现 GlusterFS 动态存储管理实践
    前言知识点定级:入门级GlusterFS和Heketi简介GlusterFS安装部署Heketi安装部署Kubernetes命令行对接GlusterFS实战服务器配置(架构1:1复刻小规模生产环境,配置略有不同)主机名IPCPU内存系统盘数据盘用途ks-master-0192.168.9.912450100KubeS......
  • AICodeConvert 开源了,从 6.24 到现在一个月,没有主动推广,居然有9.8K 访问量
    这是我另个一个之前周六6.24开始验证思路的项目,验证的感觉差不多,不做主动推广到现在一个月,访问量9.8K。源码开源了,github.com网址:AICodeConvert另一个在佛系验证中的还有这个:Base64.kr,思路见 github启发来源:有两个1.社群聊过的producthunt提交AI作品,那么就静静的等......
  • 算法学习笔记(24): 狄利克雷卷积和莫比乌斯反演
    狄利克雷卷积和莫比乌斯反演看了《组合数学》,再听了学长讲的……感觉三官被颠覆……目录狄利克雷卷积和莫比乌斯反演狄利克雷卷积特殊的函数函数之间的关系除数函数和幂函数欧拉函数和恒等函数莫比乌斯函数和欧拉函数卷积的逆元莫比乌斯函数与莫比乌斯反演求法数论分块(整除分......
  • 开源快速开发平台:做好数据管理,实现流程化办公!
    做好数据管理,可以提升企业的办公协作效率,实现数字化转型。开源快速开发平台是深受企业喜爱的低代码开发平台,拥有多项典型功能,是可以打造自主可控快速开发平台,实现一对一框架定制的软件平台。在快节奏的社会中,开源快速开发平台依托优势特点深得客户喜爱和支持。了解了开源快速开发......