首页 > 数据库 >PostgreSQL 的模式匹配与正则表达式

PostgreSQL 的模式匹配与正则表达式

时间:2023-10-06 20:16:04浏览次数:31  
标签:PostgreSQL postgres 正则表达式 text osdba substring 模式匹配 select row

一、PostgreSQL 实现模式匹配的方法
  • LIKE
  • SIMILAR TO
  • POSIX 风格的正则表达式
  • 模式匹配函数 substring
二、LIKE 操作符

只有在匹配整个字符串时返回真

符号描述
% 任意0个或任意个字符
_ 任意一个字符
\% %
\_ _
postgres=# select * from test_zhengze;
 id |   text
----+-----------
  1 | abc%ab_AB
  2 | abcabefg
  3 | abxyz
  4 | 123abf
  5 | ab_sew
  6 | ab%sew
  7 | wxf#cd
(7 rows)

postgres=# select * from test_zhengze where text like '%123%';
 id |  text
----+--------
  4 | 123abf
(1 row)

postgres=# select * from test_zhengze where text like 'ab_sew';
 id |  text
----+--------
  5 | ab_sew
  6 | ab%sew
(2 rows)

postgres=# select * from test_zhengze where text like '%\%%';
 id |   text
----+-----------
  1 | abc%ab_AB
  6 | ab%sew
(2 rows)

postgres=# select * from test_zhengze where text like '__\_%';
 id |  text
----+--------
  5 | ab_sew
(1 row)

转义字符 \也可使用 ESCAPE 子句指定成其他的字符

postgres=# select * from test_zhengze where text like '%$%%' escape '$';
 id |   text
----+-----------
  1 | abc%ab_AB
  6 | ab%sew
(2 rows)
  • ~~ 等效于 LIKE
  • ~~* 等效于 ILIKE,不区分大小写
  • !~~ 等效于 NOT LIKE
  • !~~* 等效于 NOT ILIKE
三、SIMILAR TO 正则表达式

只有在匹配整个字符串时返回真

符号描述
_ 单个字符
% 任意字符串
| 选择两个候选项之一
* 重复前面的项 >= 0
+ 重复前面的项 >=1
? 重复前面的项 0 或 1 次
{m} 重复前面的项 m 次
{m, } 重复前面的项 >=m 次
{m,n} 重复前面的项 >=m,<=n 次
() 可作为项目分组到一个独立的逻辑项
[...] 声明一个字符类
postgres=# select 'osdba' similar to 'a';
 ?column?
----------
 f
(1 row)

postgres=# select 'osdba' similar to '%(a|b)';
 ?column?
----------
 t
(1 row)

postgres=# select 'osdba' similar to '(s|b)%';
 ?column?
----------
 f
(1 row)
四、POSIX 正则表达式

只要部分匹配到字符串就返回真,类似于egrep sed awk

符号描述
. 任意字符
 
匹配操作符描述
~ 匹配正则表达式,区分大小写
~* 匹配正则表达式,不区分大小写
!~ 不匹配正则表达式,区分大小写
!~* 不匹配正则表达式,不区分大小写
postgres=# select 'osdba' ~ 'a';
 ?column?
----------
 t
(1 row)

-- 匹配开头:^ ;匹配结尾:$ 
postgres=# select 'osdba' ~ '^os';
 ?column?
----------
 t
(1 row)

postgres=# select 'osdba' ~ 'ba$';
 ?column?
----------
 t
(1 row)
五、模式匹配函数 substring
  1. subdtring(<字符串>,,[n]) :从第 m 个字符开始[,截取 n 个字符]

    postgres=# select substring('osdba',2);
     substring
    -----------
     sdba
    (1 row)
    
    postgres=# select substring('osdba',3,2);
     substring
    -----------
     db
    (1 row)
    
  2. substring(<字符串>,<字符串>)

    使用 POSIX 正则表达式

    postgres=# select substring('osdba-6-osdba',E'(\\d+)');
     substring
    -----------
     6
    (1 row)
    
  3. substring(<字符串>,<字符串>,<字符串>) 或 subtring(<字符串>from<字符串>for<字符串>)

    使用 SQL 正则表达式

    postgres=# select substring('osdba-6-osdba','%$"[0-9]+$"%','$');
     substring
    -----------
     6
    (1 row)

标签:PostgreSQL,postgres,正则表达式,text,osdba,substring,模式匹配,select,row
From: https://www.cnblogs.com/Thenext/p/17744915.html

相关文章

  • 正则表达式
    正则表达式一、元字符元字符:即为有特定含义的字符,常见的元字符如下代码说明.匹配除换行符以外的任意字符\w匹配字母或数字或下划线或汉字\s匹配任意的空白符\d匹配数字\b匹配单词的开始或结束^匹配字符串的开始(在集合字符里[^a]表示非(不匹配)的意......
  • 正则表达式及相关示例
    正则表达式简介正则表达式是由一些具有特殊含义的字符组成的字符串,多用于查找、替换符合规则的字符串。在表单验证、Url映射等处都会经常用到。一、元字符元字符:即为有特定含义的字符,常见的元字符如下常用的元字符代码说明.匹配除换行符以外的任意字符\w匹配字母或数......
  • 常用正则表达式
    手机号校验:constphoneReg=/^[1][3,4,5,6,7,8,9][0-9]{9}$/身份证校验:constsfzReg=/^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/邮箱的校验:constemailReg=/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z......
  • 深入理解正则表达式:高效处理文本数据的利器
    ......
  • Oracle数据库升级PostgreSQL 后的踩坑记录(一)之databaseId
    背景:因为业务需求,需要整个项目除了适配oracle和mysql后还需要适配PostgreSQL,在此背景下就出现了一系列的问题。踩坑一:databaseId连接数据库后启动发现某些查询报错传入的sql参数是空,经过反复排查定位到对应的MyBaits的xml文件,我贴出原始的文件文件中判断databaseid是mysql还是oracl......
  • 主流常见关系数据库分页sql语句写法。MySQL、PostgreSQL、SQLite、Oracle、DB2、SQL S
    前言1.分页sql逻辑:每页10条,取第3页。即取第21~30条数据1.1.MySQL/SQLite/PostgreSQLselect*fromdemolimit10offset20;select*fromdemolimit20,10;--PostgreSQL不支持该写法1.2.Oracle12C+Oracle11g之前很难用,Oracle12C+与MySQL用法格式一样了,只是语法关......
  • 正则表达式
    一、正则表达式的应用领域1.文本搜索和替换在文本编辑器、编程语言或命令行中,我们经常需要进行字符串匹配和替换操作。使用正则表达式,我们可以快速地找到符合特定模式的字符串,并进行相应的替换。例如,在文本编辑器中使用正则表达式查找所有的电子邮件地址,并将其替换为其他内......
  • JAVA - instanceof 模式匹配
    父类:packagecom.demo;importjava.time.LocalDate;publicclassEmployee{privateStringname;privatedoublesalary;privateLocalDatehireDay;publicEmployee(Stringname,doublesalary,intyear,intmonth,intday){this.na......
  • 使用正则表达式判断日期字符串格式是否合法遇到的问题(解决)
    引言我们在使用SpringMVC从前端接受传递过来的日期数据时,默认传递过来的数据是String类型,如果我们从前端传递过来的数据格式是yyyy/MM/dd,SpringMVC有内置类型转化器会将String类型自动转化成Date类型。但如果我们从前端传递过来的数据格式是yyyy-MM-dd,SpringMVC的内置转化器就不......
  • 甲骨文宣布: 也做 PostgreSQL!
    PostgreSQL在开源数据库世界中一直是一个标志性的存在。经过35年的严格开发,它以其可靠性、强大的功能和性能而自豪。DB-engines的突出显示,其市场份额的增长证明了其适应性强的数据模型和满足各种用例需求的多样化扩展。考虑到PG突出的地位,甲骨文将推出基于PostgreSQL14.9版......