postgresql----LIKE和SIMILAR TO
LIKE和SIMILAR TO都支持模糊查询,另外SIMILAR TO还支持正则表达式查询。模糊查询中有两个重要的符号:下划线'_'匹配任意单个字符,百分号'%'匹配任意多个字符,可以是0个,如果想匹配'_'和'%',必须在'_'和'%'前使用反斜线(\)逃逸。另外和LIKE相似的还有ILIKE,区别是LIKE区分大小写,而ILKIE不区分大小写。
示例表:
test=# drop table if exists tbl_insert;
DROP TABLE
test=# create table tbl_insert(a int,b int,c varchar(12));
CREATE TABLE
test=# insert into tbl_insert(a,b,c) values (1,1,''),(2,2,''),(3,3,''),(4,4,''),(5,5,''),(6,6,''),(6,6,''),(6,6,''),(7,7,'3%1'),
(8,8,'3%_1'),(8,8,'3_%_1'),(7,7,'abc'),(7,7,'ABc'),(7,7,'aBC');
INSERT 0 14
一.LIKE和ILIKE
1.查询字段c是以'1'结束,且'1'字符前有且只有一个字符的行。
test=# select * from tbl_insert where c like '_1';
a | b | c
---+---+----
1 | 1 | 11
5 | 5 | 51
6 | 6 | 61
(3 rows)
2.查询字段c以'1'结束的行
test=# select * from tbl_insert where c like '%1';
a | b | c
---+---+-------
1 | 1 | 11
5 | 5 | 51
6 | 6 | 1
6 | 6 | 61
6 | 6 | 661
7 | 7 | 3%1
8 | 8 | 3%_1
8 | 8 | 3_%_1
(8 rows)
3.查询字段c以1开头的行
test=# select * from tbl_insert where c like '1%';
a | b | c
---+---+----
1 | 1 | 11
6 | 6 | 1
(2 rows)
4.查询字段c中包含字符'1'的行
test=# select * from tbl_insert where c like '%1%';
a | b | c
---+---+-------
1 | 1 | 11
5 | 5 | 51
6 | 6 | 1
6 | 6 | 61
6 | 6 | 661
7 | 7 | 3%1
8 | 8 | 3%_1
8 | 8 | 3_%_1
(8 rows)
5.查询字段c中包含下划线'_'的行
test=# select * from tbl_insert where c like '%\_%';
a | b | c
---+---+-------
8 | 8 | 3%_1
8 | 8 | 3_%_1
(2 rows)
6.查询字段c中包含百分号'%'的行
test=# select * from tbl_insert where c like '%\%%';
a | b | c
---+---+-------
7 | 7 | 3%1
8 | 8 | 3%_1
8 | 8 | 3_%_1
(3 rows)
7.ILIKE查询字段c中包含字符'b'(不区分大小写)的行
test=# select * from tbl_insert where c ilike '%b%';
a | b | c
---+---+-----
7 | 7 | abc
7 | 7 | ABc
7 | 7 | aBC
(3 rows)
二.SIMILAR TO
SIMILAR TO除下划线和百分号的使用与LIKE相同,还支持正则表达式查询。
| 表示选择(二选一,如a|b,类似or)
* 表示重复前面项0次或多次,如'6*1','(66)*1'
+ 表示重复前面项1次或多次,如'6+1','(66)+1'
[] 表示方括号内字符集中的任意一个字符,如[123]表示1或2或3中的1个,可以是1,也可以是2,还可以是3,但是只能是单个字符。
1.|----查询c字段值是'abc'或'ABc'的行
test=# select * from tbl_insert where c similar to '(ab|AB)c';
a | b | c
---+---+-----
7 | 7 | abc
7 | 7 | ABc
(2 rows)
2.*----查询c字段中以'1'结尾,前面有0个或多个'6'的行
test=# select * from tbl_insert where c similar to '6*1';
a | b | c
---+---+-----
6 | 6 | 1
6 | 6 | 61
6 | 6 | 661
(3 rows)
3.*----查询c字段中以'1'结尾,前面有0个或多个'66'的行
test=# select * from tbl_insert where c similar to '(66)*1';
a | b | c
---+---+-----
6 | 6 | 1
6 | 6 | 661
(2 rows)
4.+----查询c字段中以'1'结尾,前面至少有1个'6'的行
test=# select * from tbl_insert where c similar to '6+1';
a | b | c
---+---+-----
6 | 6 | 61
6 | 6 | 661
(2 rows)
5.+----查询c字段中以'1'结尾,前面至少有1个'66'的行
test=# select * from tbl_insert where c similar to '(66)+1';
a | b | c
---+---+-----
6 | 6 | 661
(1 row)
6.[]----查询字段c中以'1'结尾,前面是0到9之间任意一个数字的行
test=# select * from tbl_insert where c similar to '[0-9]1';
a | b | c
---+---+----
1 | 1 | 11
5 | 5 | 51
6 | 6 | 61
(3 rows)
7.[]----查询字段c中以'1'结尾,前面是1或6中的行
test=# select * from tbl_insert where c similar to '[1,6]1';
a | b | c
---+---+----
1 | 1 | 11
6 | 6 | 61
(2 rows)
postgresql----LIKE和SIMILAR TO的更多相关文章
- PostgreSQL Q&A: Building an Enterprise-Grade PostgreSQL Setup Using Open Source Tools
转自:https://www.percona.com/blog/2018/10/19/postgresql-building-enterprise-grade-setup-with-open-sour ...
- PostgreSQL 之 CREATE FUNCTION
官方文档 语法: CREATE [ OR REPLACE ] FUNCTION name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } d ...
- 广州PostgreSQL用户会技术交流会小记 2015-9-19
广州PostgreSQL用户会技术交流会小记 2015-9-19 今天去了广州PostgreSQL用户会组织的技术交流会 分别有两个session 第一个讲师介绍了他公司使用PostgreSQL-X2 ...
- postgresql常用命令
1.createdb 数据库名称 产生数据库2.dropdb 数据库名称 删除数据库 3.CREATE USER 用户名称 创建用户4.drop User 用户名称 删除用户 5.SELECT use ...
- 【转载】Fast Inserts to PostgreSQL with JDBC and COPY FROM
source: http://rostislav-matl.blogspot.com/2011/08/fast-inserts-to-postgresql-with-jdbc.html Thanks ...
- YUM Installation PostgreSQL
PostgreSQL can be installed using RPMs (binary) or SRPMs (source) managed by YUM. This is available ...
- PostgreSQL configuration file postgresql.conf recommanded settings and how it works
1 Set max_connections to three times the number of processor cores on the server. Include vir ...
- PostgreSQL Partitions
why we need partitions The first and most demanding reason to use partitions in a database is to inc ...
- PostgreSQL中initdb做了什么
在使用数据库前,是启动数据库,启动数据库前是initdb(初始化数据库):一起来看一下initdb做了什么吧. 初始化数据库的操作为: ./initdb -D /usr/local/pgsql/dat ...
- Understanding postgresql.conf : log*
After loooong pause, adding next (well, second) post to the “series“. This time, I'd like to describ ...
随机推荐
- 关于Cocos2d-x事件处理机制
事件处理步骤: 1.创建一个触摸事件监听器(单点触摸或多点触摸) 2.实现触摸事件的响应方法 3.添加事件监听器(场景优先或固定值优先) 4.当用户触摸时,事件分发器就会将事件分发给监听器进行响应 首 ...
- webBrowser1.Document.Cookie取不到HttpOnly的Cookie,取Cookie不完整【转】
在做数据采集时,有些网站需要输入验证码,但各网站验证码都不同,不可能有完美的识别验证码的代码,所以我也没去研究,我所采取的方案是:在winform里通过WebBrowser调用网页先手动登录系统,然后 ...
- (转)深入解析SendMessage、PostMessage
转自:http://blog.csdn.net/xt_xiaotian/article/details/2778689 本文将使用C++语言,在MFC框架的配合下给出PostMessage.S ...
- QLayout布局时自动占满全部的空间。
QLayout子类布局时会自动占满全部的空间,和一般需要多大空间占多大空间的要求不符合,很烦人. 案例: 本来一个容器简单的放几个组件会剩余很大的空间,就那么剩余就好.
- opencv播放视屏并控制位置
原文地址:http://blog.csdn.net/augusdi/article/details/9000592 cvGetCaptureProperty是我们需要使用到的获取视频属性的函数. do ...
- Loadrunner中socket协议中的三个关联函数
这3个函数其实都可以动态获取运行中收到的数据包中的数据,只要跟在要获取的收取数据包脚本后面即可.其中:lrs_save_searched_string和lrs_save_param如果buf_desc ...
- xpath的数据和节点类型以及XPath中节点匹配的基本方法
XPath数据类型 XPath可分为四种数据类型: 节点集(node-set) 节点集是通过路径匹配返回的符合条件的一组节点的集合.其它类型的数据不能转换为节点集. 布尔值(boolean) ...
- jquery的委托处理
1.基本用法: javascript的事件模型,采用”冒泡”模式,也就是说,子元素的事件会逐级向上”冒泡”,成为父元素的事件. 利用这一点,可以大大简化事件的绑定.比如,有一个表格(table元素) ...
- mysql数据库使用mysqldump工具针对一个数据库备份,使用--databases选项与不使用该参数的区别
需求描述: 今天在做mysqldump备份某个数据库的试验,在备份某个数据库的时候可以使用 --databases参数,也可以直接进行某个数据库的备份,那么这里记录下两者的区别 操作过程: 1.使用- ...
- X-code 描述文件的位置
不管是真机测试还是打包的过程中,都需要描述文件.在桌面上,按快捷键“commd+Shift+G”,就会显示一个要填的文件路径,如下图: 找到描述文件的路径: ~/Library/MobileDevic ...