博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
postgresql----LIKE和SIMILAR TO
阅读量:6678 次
发布时间:2019-06-25

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

LIKE和SIMILAR TO都支持模糊查询,另外SIMILAR TO还支持正则表达式查询。模糊查询中有两个重要的符号:下划线'_'匹配任意单个字符,百分号'%'匹配任意多个字符,可以是0个,如果想匹配'_'和'%',必须在'_'和'%'前使用反斜线(\)逃逸。另外和LIKE相似的还有ILIKE,区别是LIKE区分大小写,而ILKIE不区分大小写。

 

示例表:

test=# drop table if exists tbl_insert;DROP TABLEtest=# create table tbl_insert(a int,b int,c varchar(12));CREATE TABLEtest=# insert into tbl_insert(a,b,c) values (1,1,'11'),(2,2,'22'),(3,3,'33'),(4,4,'44'),(5,5,'51'),(6,6,'1'),(6,6,'61'),(6,6,'661'),(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)

 

转载于:https://www.cnblogs.com/alianbog/p/5617079.html

你可能感兴趣的文章
Java是怎么运行的?
查看>>
微信小程序mpvue项目使用WuxWeapp前端UI组件
查看>>
利用构建缓存机制缩短Docker镜像构建时间
查看>>
webpack 的 scope hoisting 是什么?
查看>>
2019前端面试题汇总(主要为Vue)
查看>>
js编程
查看>>
前端设计模式
查看>>
如何更优雅地切换Git分支
查看>>
ID3 算法介绍
查看>>
SpringBoot参数校验
查看>>
云HBase发布全文索引服务,轻松应对复杂查询
查看>>
码农张的Bug人生 - 目录
查看>>
学习webpack4 - 抽离公共代码
查看>>
【分享创造】react-typewriter-hook: 用react hooks来实现打字机的效果
查看>>
极限编程 (Extreme Programming) 和用户故事 (User Stories) 的关系
查看>>
coredns 排错记
查看>>
CentOS 7 安装 Nginx
查看>>
程序员毒鸡汤:我们都该学会正确的失败
查看>>
在 JavaScript 中优雅的提取循环内的数据
查看>>
HTML-语义类标签
查看>>