PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.2. 比较操作符

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 9.2. 比较操作符 常见的比较操作符都可用,如表 9.1所示。 表 9.1. 比较操作符 操作符 描述 < 小于 > 大于 <= 小于等于 >= 大于等于 = 等于 <> or != 不等于 注意 !=操作符在分析器阶段被转换成<>。

9.2. 比较操作符

常见的比较操作符都可用,如表 9.1所示。

表 9.1. 比较操作符

操作符 描述
< 小于
> 大于
<= 小于等于
>= 大于等于
= 等于
<> or != 不等于

注意

!=操作符在分析器阶段被转换成<>。不能把!=<>操作符实现为做不同的事。

比较操作符可以用于所有可以比较的数据类型。所有比较操作符都是双目操作符,它们返回boolean类型;类似于1 < 2 < 3的表达式是非法的(因为没有<操作符可以比较一个布尔值和3)。

表 9.2所示,也有一些比较谓词。 它们的行为和操作符很像,但是具有 SQL 标准所要求的特殊语法。

表 9.2. 比较谓词

谓词 描述
a BETWEEN x AND y 在x和y之间
a NOT BETWEEN x AND y 不在x和y之间
a BETWEEN SYMMETRIC x AND y 在对比较值排序后位于x和y之间
a NOT BETWEEN SYMMETRIC x AND y 在对比较值排序后不位于x和y之间
a IS DISTINCT FROM b 不等于,空值被当做一个普通值
a IS NOT DISTINCT FROM b 等于,空值被当做一个普通值
expression IS NULL 是空值
expression IS NOT NULL 不是空值
expression ISNULL 是空值(非标准语法)
expression NOTNULL 不是空值(非标准语法)
boolean_expression IS TRUE 为真
boolean_expression IS NOT TRUE 为假或未知
boolean_expression IS FALSE 为假
boolean_expression IS NOT FALSE 为真或者未知
boolean_expression IS UNKNOWN 值为未知
boolean_expression IS NOT UNKNOWN 为真或者为假

除了比较操作符以外,特殊的BETWEEN结构也可以使用:

a BETWEEN x AND y

等效于

a >= x AND a <= y

注意BETWEEN认为终点值是包含在范围内的。 NOT BETWEEN可以做相反比较:

a NOT BETWEEN x AND y

等效于

a < x OR a > y

BETWEEN SYMMETRICBETWEEN相同,不过BETWEEN SYMMETRIC不要求AND左边的参数小于或等于右边的参数。如果左参数不是小于等于右参数,这两个参数会自动被交换,这样总是会应用一个非空范围。

当有一个输入为空时,普通的比较操作符会得到空(表示未知), 而不是真或假。例如,7 = NULL得到空,7 <> NULL 也一样。如果这种行为不合适,可以使用 IS [ NOT ] DISTINCT FROM谓词:

a IS DISTINCT FROM b
a IS NOT DISTINCT FROM b

对于非空输入,IS DISTINCT FROM<> 操作符一样。不过,如果两个输入都为空,它会返回假。而如果只有一个输入为空, 它会返回真。类似地,IS NOT DISTINCT FROM 对于非空输入的行为与=相同,但是当两个输入都为空时它返回真, 并且当只有一个输入为空时返回假。因此, 这些谓词实际上把空值当作一种普通数据值而不是unknown

要检查一个值是否为空,使用下面的结构:

expression IS NULL
expression IS NOT NULL

或者等效,但并不标准的结构:

expression ISNULL
expression NOTNULL

不要expression = NULL,因为NULL是不等于NULL的(控制代表一个未知的值,因此我们无法知道两个未知的数值是否相等)。这种行为符合 SQL 标准。

提示

有些应用可能要求表达式expression = NULLexpression得出空值时返回真。我们强烈建议这样的应用修改成遵循 SQL 标准。但是,如果这样修改不可能完成,那么我们可以使用配置变量transform_null_equals。如果打开它,PostgreSQL将把x = NULL子句转换成x IS NULL

布尔值也可以使用下列结构进行测试:

boolean_expression IS TRUE
boolean_expression IS NOT TRUE
boolean_expression IS FALSE
boolean_expression IS NOT FALSE
boolean_expression IS UNKNOWN
boolean_expression IS NOT UNKNOWN

这些结构将总是返回真或假,从来不返回空值,即使操作数是空也如此。空值输入被当做逻辑值未知。 请注意实际上IS UNKNOWNIS NOT UNKNOWN分别与IS NULLIS NOT NULL相同, 只是输入表达式必须是布尔类型。

表 9.3中所示, 也有一些比较相关的函数可用。

表 9.3. 比较函数

函数 描述 示例 示例结果
num_nonnulls(VARIADIC "any") 返回非空参数的数量 num_nonnulls(1, NULL, 2) 2
num_nulls(VARIADIC "any") 返回空参数的数量 num_nulls(1, NULL, 2) 1

本文转自PostgreSQL中文社区,原文链接:9.2. 比较操作符

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
26天前
|
SQL 关系型数据库 PostgreSQL
CTE vs 子查询:深入拆解PostgreSQL复杂SQL的隐藏性能差异
本文深入探讨了PostgreSQL中CTE(公共表表达式)与子查询的选择对SQL性能的影响。通过分析两者底层机制,揭示CTE的物化特性及子查询的优化融合优势,并结合多场景案例对比执行效率。最终给出决策指南,帮助开发者根据数据量、引用次数和复杂度选择最优方案,同时提供高级优化技巧和版本演进建议,助力SQL性能调优。
104 1
|
8月前
|
关系型数据库 Go 网络安全
go语言中PostgreSQL驱动安装
【11月更文挑战第2天】
349 5
|
5月前
|
SQL 关系型数据库 OLAP
云原生数据仓库AnalyticDB PostgreSQL同一个SQL可以实现向量索引、全文索引GIN、普通索引BTREE混合查询,简化业务实现逻辑、提升查询性能
本文档介绍了如何在AnalyticDB for PostgreSQL中创建表、向量索引及混合检索的实现步骤。主要内容包括:创建`articles`表并设置向量存储格式,创建ANN向量索引,为表增加`username`和`time`列,建立BTREE索引和GIN全文检索索引,并展示了查询结果。参考文档提供了详细的SQL语句和配置说明。
133 2
|
10月前
|
关系型数据库 Serverless 定位技术
PostgreSQL GIS函数判断两条线有交点的函数是什么?
PostgreSQL GIS函数判断两条线有交点的函数是什么?
686 60
|
11月前
|
SQL 自然语言处理 关系型数据库
在 PostgreSQL 中使用 `REPLACE` 函数
【8月更文挑战第8天】
1613 9
在 PostgreSQL 中使用 `REPLACE` 函数
|
10月前
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
|
11月前
|
SQL 存储 关系型数据库
PostgreSQL核心之SQL基础学习
PostgreSQL核心之SQL基础学习
144 3
|
11月前
|
关系型数据库 PostgreSQL
PostgreSQL的null值函数
【8月更文挑战第20天】PostgreSQL的null值函数
303 3
|
11月前
|
SQL 安全 关系型数据库
PostgreSQL SQL注入漏洞(CVE-2018-10915)--处理
【8月更文挑战第8天】漏洞描述:PostgreSQL是一款自由的对象关系型数据库管理系统,支持多种SQL标准及特性。存在SQL注入漏洞,源于应用未有效验证外部输入的SQL语句,允许攻击者执行非法命令。受影响版本包括10.5及更早版本等。解决方法为升级PostgreSQL
573 2
|
11月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
1105 0

热门文章

最新文章

推荐镜像

更多