postgresql~*符号的含义及用法说明

操作符 ~~ 等效于 LIKE, 而 ~~* 对应 ILIKE。 还有 !~~ 和 !~~* 操作符 分别代表 NOT LIKE 和 NOT ILIKE。

另外:

~ 匹配正则表达式,大小写相关 'thomas' ~ '.*thomas.*'

~*搜索 匹配正则表达式,大小写无关 'thomas' ~* '.*Thomas.*'

!~ 不匹配正则表达式,大小写相关 'thomas' !~ '.*Thomas.*'

!~* 不匹配正则表达式,大小写无关 'thomas' !~* '.*vadim.*'

补充:Postgresql字符串检索关键是和符号 LIKE, ESCAPE, ILIKE, ~, ~*, !~, !~* 的含义和区别

最近在做了一个关于postgreSQL相关的项目,个人工作中遇到了关于字符串检索的一些处理,以下是个人对字符串检索关键是和符号 LIKE, ESCAPE, ILIKE, ~, ~*, !~, !~*的理解,不正之处还请指出微笑

LIKE

Select * from test where varchar like ‘_a%'; 

varchar匹配任何a前有一个字符的字符串。

‘_'与'%'为通配符。'_'匹配任意一个字符,'%'匹配0至多个任意字符。

ESCAPE

Select* from test where varchar like ‘b_a%'escape ‘b'; 

varchar 匹配任何以'_a'开头的字符串。

ESCAPE 'escape_character' 允许在字符串中搜索通配符而不是将其作为通配符使用。

请注意反斜杠在字符串文本里已经有特殊含义了,所以如果你写一个包含反斜杠的模式常量,那你就要在 SQL 语句里写两个反斜杠。

因此,写一个匹配单个反斜杠的模式实际上要在语句里写四个反斜杠。

你可以通过用 ESCAPE 选择一个不同的逃逸字符来避免这样;这样反斜杠就不再是 LIKE 的特殊字符了。

但仍然是字符文本分析器的特殊字符,所以你还是需要两个反斜杠。

我们也可以通过写成 ESCAPE '' 的方式关闭逃逸机制,这时,我们就不能关闭下划线和百分号的特殊含义。

例子:

查找数据库中表的名字(查找以tbl_开头的表的名字)

select tablename from pg_tables where tablename like 'tbl!_%'ESCAPE '!';

利用escape转义: 上面的sql语句中就是将!作为转义字符,作用是将"_"转换成普通的"_"

ILIKE

Select * from test where varchar ilike ‘_a%'; 

varchar匹配任何a或者A前有一个字符的字符串。

与Like相比,ILike忽略大小写。

正则表达式匹配操作符

~ 匹配正则表达式,大小写相关

Select * from test where varchar ~ ‘ab‘; 

varchar匹配任何包含'ab'的字符串。

~* 匹配正则表达式,大小写无关

Select * from test where varchar ~‘AB‘;

varchar匹配任何包含'ab'、'aB'、'Ab'、'AB'的字符串。

与' ~'相比,忽略大小写。

!~ 不匹配正则表达式,大小写相关

Select * from test where varchar ~ ‘a‘; 

varchar匹配任何不包含'a'的字符串。

!~* 不匹配正则表达式,大小写无关

select * from test where varchar !~* ‘A‘;

varchar匹配任何不包含'a'和'A'的字符串。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Postgresql 数据库转义字符操作

    产生问题 Postgresql数据库运行下面insert命令 insert into mapping_mac_brand(_id,mac,brand) values(777,'D86595','Toy\'s Myth Inc.') 提示下面的警告: Warning: nonstandard use of \' in a string literal HINT: Use '' to write quotes in strings or use the escape string syntax(E.

  • 浅谈PostgreSQL中大小写不敏感问题

    本文主要讨论PostgreSQL中大小写不敏感存在的问题. 默认情况下,PostgreSQL会将列名和表名全部转换为小写状态. 图1 Person与person 如图1所示,我们创建表person,其中包含name列.然后插入一条记录.执行SELECT查询时,使用列名Name和表名Person而不是name和person,发现仍然可以正常获取刚刚插入表person中的记录. 图2 创建表Person? 此时如果我们再想创建表Person,会得到一个错误,因为此时PostgreSQL实际上把表名从

  • postgresql数据库使用说明_实现时间范围查询

    按照日期查询通常有好几种方法: 按照日期范围查询有好几种方法,日期字段类型一般为: Timestamp without timezone 方法一: select * from user_info where create_date >= '2015-07-01' and create_date < '2015-08-15'; 方法二: select * from user_info where create_date between '2015-07-01' and '2015-08-15';

  • postgresql 实现将数组变为行

    有的时候需要把数组元素同表中的字段进行关系运算,首先得把array变为记录行 SELECT "unnest"(array[1,2,3]) 结果: unnest 求数组交集: SELECT "unnest"(array[1,2,3]) INTERSECT SELECT "unnest"(array[3,4,5]) 结果: unnest 3 补充:PostgreSQL单列多行变一行&一行变多行 工作中经常遇到这样一个场景,希望将某个字断查询出

  • 基于PostgreSql 别名区分大小写的问题

    PostgreSql是区分大小写的 如果别名的大小不一致就会提示错误: SELECT * FROM ( SELECT cpi."product_item_id" "PRODUCT_ITEM_ID" FROM prd.up_product_item cpi ) a WHERE a.PRODUCT_ITEM_ID=1 一个很简单的子查询,但是会出错,虽然从语句上看大小写是一致的,但是内部查询中还是使用了小写.PostgreSql对于大写都需要加上双引号的,不然还是视作小

  • PostgreSQL LIKE 大小写实例

    PostgreSQL 数据库 函数upper("字符串"):转成大写字符串 WHERE UPPER("User_Name") LIKE upper(username) 此句查询"User_Name" 中值大小写不区分. SELECT "User_Id","User_Image","User_Name","User_Birthday","User_Sex&qu

  • postgresql~*符号的含义及用法说明

    操作符 ~~ 等效于 LIKE, 而 ~~* 对应 ILIKE. 还有 !~~ 和 !~~* 操作符 分别代表 NOT LIKE 和 NOT ILIKE. 另外: ~ 匹配正则表达式,大小写相关 'thomas' ~ '.*thomas.*' ~*搜索 匹配正则表达式,大小写无关 'thomas' ~* '.*Thomas.*' !~ 不匹配正则表达式,大小写相关 'thomas' !~ '.*Thomas.*' !~* 不匹配正则表达式,大小写无关 'thomas' !~* '.*vadim.

  • Linux Shell中的特殊符号和含义简明总结(包含了绝大部份)

    在Linux Shell中有很多的特殊符号,这对于我们写Shell脚本时要特别留意:一方面要知道这些特殊符号的用法,这些符号用好了可以达到事半功倍的效果:但另一方面要避免这些特殊符号的过度使用而导致脚本难以调试.难以阅读. 这些特殊符号罗列出来大致如下: 复制代码 代码如下: # ; ;; . , / / 'string'| ! $ ${} $? $$ $* "string"* ** ? : ^ $# $@ `command`{} [] [[]] () (()) || &~ ~

  • java Swing JFrame框架类中setDefaultCloseOperation的参数含义与用法示例

    本文实例讲述了java Swing JFrame框架类中setDefaultCloseOperation的参数含义与用法.分享给大家供大家参考,具体如下: 先来看一个实例(一个空的java窗口): package awtDemo; import javax.swing.*; //使用Swing类,必须引入Swing包 public class JFrameDemo1{ public static void main( String args[]) { //定义一个窗体对象f,窗体名称为"一个简单

  • 深入理解js 中async 函数的含义和用法

    一.终极解决 异步操作是 JavaScript 编程的麻烦事,麻烦到一直有人提出各种各样的方案,试图解决这个问题. 从最早的回调函数,到 Promise 对象,再到 Generator 函数,每次都有所改进,但又让人觉得不彻底.它们都有额外的复杂性,都需要理解抽象的底层运行机制. 异步I/O不就是读取一个文件吗,干嘛要搞得这么复杂?异步编程的最高境界,就是根本不用关心它是不是异步. async 函数就是隧道尽头的亮光,很多人认为它是异步操作的终极解决方案. 二.async 函数是什么? 一句话,

  • JS async 函数的含义和用法实例总结

    本文实例讲述了JS async 函数的含义和用法.分享给大家供大家参考,具体如下: 学习老师最后一篇文章并做总结, 前面我们认识了各种异步编程方式:回调函数,Promise对象,Generator函数, 再到两种自动执行方式:Thunk,co 好像我们为了更好的解决异步编程做了很多事情, 但是这也说明了一个问题 就是目前仍是的异步编程都有或多或少的问题,才导致我们要找对应的解决方案 今天我们仍是最后的大招:async 这个关键字在哪里见到来着? 我们可以给script标签添加 async 属性来

  • JS co 函数库的含义和用法实例总结

    本文实例讲述了JS co 函数库的含义和用法.分享给大家供大家参考,具体如下: 继续学习阮一峰老师异步编程四部曲之三:co co在很早之前就听超哥讲过,说在node编程中大量用到,源码很简单,但是想法很强大. 让我有空抓紧了解下,前一段时间弄离职的事情,跑来跑去累的够呛. 现在终于一切回归正常了,还在拼命的适应新公司的节奏.只能趁周末继续学习了. 好了,不瞎扯了,回归主题,前两篇文章我们分别学习了 Generator 函数和 Thunk 方式的自动执行. 今天我们接着上次的思路学习使用 co 工

  • JS Thunk 函数的含义和用法实例总结

    本文实例讲述了JS Thunk 函数的含义和用法.分享给大家供大家参考,具体如下: 前面我们已经学习过了Generator 函数的优势和使用场景. 这篇文章我们继续学习阮老师的第二篇文章,Thunk 函数的含义和用法 说实话,在这之前是没听过这个词的,但其实如果你对犀牛书里的不完全函数有认真看过的话 理解起来也不是很费劲. 首先什么是 thunk 函数? 很多场景下我们都会陷入一个问题,就是函数参数的求值时间. 是函数调用时即求值还是在函数内使用时才求值? var x = 1; function

  • JS Generator 函数的含义与用法实例总结

    本文实例讲述了JS Generator 函数的含义与用法.分享给大家供大家参考,具体如下: 读阮一峰老师<Generator 函数的含义与用法>总结 老师的文章通俗易懂,但是我个人理解上面有一些差,所以看了几遍之后才有呢么一点点体会 把它记录下来. 还是那句话,所有事物的出现都是为了解决对应的问题. 那么Generator出现是为了解决什么问题的呢? 在异步编程的场景下,如果有多个异步任务,如何处理他们的先后执行顺序? 举一个常见的例子,jquery的ajax请求,每一个success都是一个

  • C# 中 “$” 符号的作用以及用法详解

    前言:$是c# 6.0 的语言特性,功能类似string.format(),更方便的地方在于不要像format一样使用索引,可以直接使用变量.表达式或者方法的执行. 一.C#中$的作用 谈及这个$,其实它是C#6.0语法中模板字符串的一种写法,什么是模版字符串?还记得你们用过的格式化字符串吗?string.Format() 这个方法,是最常用的方法之一. 那$又是什么呢?它是为了替代string.format()的,原先赋值需要占位符和变量,当需要拼接多个变量会造成语句过长等不易理解问题. $是

  • python中列表的含义及用法

    示例 列表是元素的集合,存储在一个变量中.列表中存储的元素类型没有限制,下面是列表的一个简单例子. students = ['bernice', 'arron', 'cody'] for student in students: print("Hello, " + student.title() + "!") 命名和定义列表 因为列表是对象的集合,所以给它们一个复数的名称是很好的做法.如果列表中的每一项都是一个 car, 就命名列表为 'cars'.这样给你了一种直

随机推荐