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的更多相关文章

  1. 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 ...

  2. PostgreSQL 之 CREATE FUNCTION

    官方文档 语法: CREATE [ OR REPLACE ] FUNCTION name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } d ...

  3. 广州PostgreSQL用户会技术交流会小记 2015-9-19

    广州PostgreSQL用户会技术交流会小记 2015-9-19 今天去了广州PostgreSQL用户会组织的技术交流会 分别有两个session 第一个讲师介绍了他公司使用PostgreSQL-X2 ...

  4. postgresql常用命令

    1.createdb 数据库名称 产生数据库2.dropdb 数据库名称 删除数据库 3.CREATE USER 用户名称 创建用户4.drop User 用户名称 删除用户 5.SELECT use ...

  5. 【转载】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 ...

  6. YUM Installation PostgreSQL

    PostgreSQL can be installed using RPMs (binary) or SRPMs (source) managed by YUM. This is available ...

  7. 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 ...

  8. PostgreSQL Partitions

    why we need partitions The first and most demanding reason to use partitions in a database is to inc ...

  9. PostgreSQL中initdb做了什么

    在使用数据库前,是启动数据库,启动数据库前是initdb(初始化数据库):一起来看一下initdb做了什么吧. 初始化数据库的操作为: ./initdb -D /usr/local/pgsql/dat ...

  10. Understanding postgresql.conf : log*

    After loooong pause, adding next (well, second) post to the “series“. This time, I'd like to describ ...

随机推荐

  1. 数据库 proc编程八

    #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <stri ...

  2. WCF系列

    转自:1) http://www.cnblogs.com/zhili/p/WCFSummary.html 2)  http://www.cnblogs.com/artech/archive/2009/ ...

  3. 【F12】修改 DevTools的主题

    1.点击setting

  4. WaitForSingleObject()

    参见:http://blog.csdn.net/xiaobai1593/article/details/6672193 1. 格式 DWORD WaitForSingleObject( HANDLE  ...

  5. linux -- Apache执行权限

    最近在用php调用exec方法去执行一个linux终端下的命令,结果每次都不能执行成功,网上多番搜寻,最终找到一篇有用的文章,主要原因是因为Apache的执行权限的问题.以下是原文(稍加修改): 利用 ...

  6. Java获取网络IP

    Java获取获取网络IP,浅尝辄止咯- import java.net.InetAddress; import java.net.UnknownHostException; /** * 获取网络IP ...

  7. pyqt的多Button的点击事件的槽函数的区分发送signal的按钮。

    关键函数:QPushButton的setObjectName()/objectName() 个人注解:按功能或者区域,将按钮的点击事件绑定的不同的槽函数上. from PyQt5.QtWidgets ...

  8. window用Xmanager4.0的Xstart连接linux远程桌面

    安装包: xorg-x11-xauth xterm.x86_64 0:253-1.el6 Execute command path:/usr/bin/xterm Xstart连接Linux远程桌面有一 ...

  9. socket小实例

    服务端 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...

  10. 超全面的JavaWeb笔记day09<Servlet&GenericServlet&HttpServlet&ServletContext>

    1.Servlet概述 2.Servlet接口 3.GenericServlet 4.HttpServlet 5.Servlet细节 6.ServletContext(重要) Servlet概述 生命 ...