博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PostgreSql 功能和操作
阅读量:6322 次
发布时间:2019-06-22

本文共 2130 字,大约阅读时间需要 7 分钟。

  hot3.png

 1、模式匹配

  pg中提供3种模式匹配的方法:传统SQL LIKE 操作;最近的SIMILAR TO操作(1999添加到SQL);POSIX-style正则表达式。
  函数可用来提取or替换一个匹配的子字符串从匹配的位置。若你有超越这种模式匹配的需求,可以考虑在Perl或Tcl中写一个自定义的函数。
  
  1.1、传统SQL LIKE 操作
   string LIKE pattern [ESCAPE escape-character]
   string NOT LIKE pattern [ESCAPE escape-character]
   若string匹配提供的pattern,则like表达式返回true,NOT与之相反。
   若pattern中不含有"%" 或"_"符号,则pattern仅仅代表string自己,这种情况下LIKE操作符就像等于操作符。
   "_":匹配任何单个字符
   "%":匹配任何序列的0个或多个字符
   如:
    'abc' LIKE 'abc'    true
    'abc' LIKE 'a%'     true
    'abc' LIKE '_b_'    true
    'abc' LIKE 'c'      false
    
   LIKE模式匹配总是涉及整个字符串,因此,若想要匹配一个字符串中任何一个序列,则该pattern需要以"%"开始和结尾。
   匹配字面的"%" 或"_"符号,通过在pattern中使用escape字符(转义字符),默认的转义字符是一个"\",但也可以使用ESCAPE从句。为匹配escape字符本身,需要写2个escape字符。
   也可以通过写 ESCAPE ''来选择no escape字符,这将有效的禁止escape机制,从而使它不可能关掉"%" 或"_"符号的特殊意义。
   关键字ILIKE可以替换LIKE,根据活动的地区使得大小写不敏感。此不是SQL标准却是PG扩展
   "~~" 等价于 LIKE;"~~*" 等价于 ILIKE("!~~"/"!~~*"代表NOT LIKE 和NOT ILIKE)
  
  1.2、SIMILAR TO正则表达式
   string SIMILAR TO pattern [ESCAPE escape-character]
   string NOT SIMILAR TO pattern [ESCAPE escape-character]
   类似于LIKE,除了它解析pattern使用SQL标准正则表达式外,SQL正则表达式在LIKE符号和通用正则表达式符号之上。
   只有它的pattern匹配整个字符串时,该SIMILAR TO成功。这是不同于常见的正则表达式的行为模式可以匹配任何字符串的一部分。也像LIKE,SIMILAR TO 使用"%" 或"_"符号作为一个通配符代表任何字符串or单个字符。
   除了借用了LIKE的这些特性, SIMILAR TO 借用POSIX正则表达式支持模式匹配的通配符:
   | 2个选择中的任何一个
   * 重复前一个项0次or更多次
   + 重复前一个项1次or更多次
   ? 重复前一个项0次or 1次
   {m} 重复前一个项m次
   {m,} 重复前一个项m次or更多次
   {m,n} 重复前一个项至少m次,不超过n次
   Parentheses() 组合项到一个逻辑项
   [...] 指明一个字符类,就像在POSIX正则表达式里的一样
   如:
    'abc' SIMILAR TO 'abc'      true
    'abc' SIMILAR TO 'a'        false
    'abc' SIMILAR TO '%(b|d)%'  true
    'abc' SIMILAR TO '(b|c)%'   false

   substring(string from pattern for escape-character),提供抽取匹配SQL正则表达式的子字符串函数,与使用SIMILAR TO一样,指定的pattern必须匹配整个字符串,

   否则函数失败并返回null,返回标识模式的一部分表示成功,pattern必须包含2个出现的escape字符紧随其后的是一个双引号",文本匹配模式的一部分返回这些标记之间。
   如:#"限制返回字符串
    substring('foobar' from '%#"o_b#"%' for '#')   oob
    substring('foobar' from '#"o_b#"%' for '#')    NULL

 

  1.3、POSIX-style正则表达式

   正则表达式匹配操作符:

   操作符        描述                                例子
   ~            匹配正则表达式,大小写敏感            'thomas' ~ '.*thomas.*'
   ~*            匹配正则表达式,大小写不敏感        'thomas' ~* '.*Thomas.*'
   !~            不匹配正则表达式,大小写敏感        'thomas' !~ '.*Thomas.*'
   !~*            不匹配正则表达式,大小写不敏感        'thomas' !~* '.*vadim.*'
   
   POSIX正则表达式为模式匹配提供比使用LIKE和SIMILAR TO更强大的方式。
   正则表达式是一个缩写的定义一组字符串的一个字符序列

转载于:https://my.oschina.net/rksi5/blog/265039

你可能感兴趣的文章
Hadoop集群完全分布式安装
查看>>
QString,char,string之间赋值
查看>>
MySql之基于ssl安全连接的主从复制
查看>>
informix的逻辑日志和物理日志分析
查看>>
wordpress admin https + nginx反向代理配置
查看>>
管理/var/spool/clientmqueue/下的大文件
查看>>
centos 5.5 64 php imagick 模块错误处理记录
查看>>
apache中文url日志分析--php十六进制字符串转换
查看>>
浅谈代理
查看>>
基于jquery实现的超酷动画源码
查看>>
fl包下的TransitionManager的使用
查看>>
Factorialize a Number
查看>>
防HTTP慢速攻击的nginx安全配置
查看>>
Spring Boot2.0+中,自定义配置类扩展springMVC的功能
查看>>
参与博客编辑器改版,我的礼物 感谢51cto
查看>>
JavaWeb笔记——JSTL标签
查看>>
一些实用性的总结与纠正
查看>>
自动生成四则运算题目
查看>>
git回退到某个历史版本
查看>>
HTML5基础(二)
查看>>