↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

已结束支持的版本: 7.2 / 7.1
历史版本。 PostgreSQL 7.2 已结束支持。 请参阅 当前版本手册.

1.4. 词法优先级 #

操作符的优先级和结合性是固定写在解析器中的。大多数操作符具有相同的优先级,并且是左结合的。这可能导致不直观的行为;例如,布尔操作符 < 和 > 与布尔操作符 <= 和 >= 的优先级不同。此外,在组合使用二元和一元操作符时,有时需要添加圆括号。例如:

SELECT 5 ! - 6;

将被解析为

SELECT 5 ! (- 6);

因为解析器并不知道 — 等到知道时已经太迟了 — ! 被定义为后缀操作符,而不是中缀操作符。要在这种情况下得到所需的行为,必须写成:

SELECT (5 !) - 6;

这是为可扩展性付出的代价。

表 1.1. 操作符优先级(递减)

操作符/元素结合性描述
::左PostgreSQL-风格的类型转换
[ ]左数组元素选择
.左表/列名分隔符
-右一元负号
^左求幂
* / %左乘、除、取模
+ -左加、减
IS 测试 TRUE、FALSE、UNKNOWN、NULL
ISNULL 空值测试
NOTNULL 非空测试
(任意其他)左所有其他内建和用户定义的操作符
IN 集合成员关系
BETWEEN 范围包含
OVERLAPS 时间区间重叠
LIKE ILIKE 字符串模式匹配
< > 小于、大于
=右相等、赋值
NOT右逻辑否定
AND左逻辑合取
OR左逻辑析取

注意,这些操作符优先级规则也适用于名称与上述内置操作符相同的用户定义操作符。例如,如果你为某种自定义数据类型定义了一个 “+” 操作符,那么无论你的操作符做什么,它都将具有与内置 “+” 操作符相同的优先级。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.