第四章. 操作符
-
内容
-
语法优先级
-
通用操作符
-
数字操作符
-
几何操作符
-
时间间隔操作符
-
IP V4 CIDR 操作符
-
IP V4 INET 操作符
描述 Postgres
内建的可用操作符.
Postgres 提供大量的内建的用于系统类型的操作符.这些操作符在系统表
pg_operator
中定义.在 pg_operator 里的每一个入口/记录都包括操作符实现过程名和输入输出类型的表OID
.
要想了解所有"||" -字符串连接操作符的所有变种,使用下面命令:
SELECT oprleft, oprright, oprresult, oprcode
FROM pg_operator WHERE oprname = '||';
oprleft|oprright|oprresult|oprcode
-------+--------+---------+-------
25| 25| 25|textcat
1042| 1042| 1042|textcat
1043| 1043| 1043|textcat
(3 rows)
用户可以通过使用操作符名来使用操作符,例如:
select * from emp where salary < 40000;
当然,用户可以直接使用操作符的实现函数.这时,上面查询应该这样表示:
select * from emp where int4lt(salary, 40000);
psql 有一个命令 (\dd) 可以显示这些操作符.
语法优先级
操作符的优先级现在是语法分析器的硬代码.多数操作符有相同的优先级而且是左关联的。这有可能导致不可预见的后果;比如说,布尔操作符
"<" 和 ">" 与 "<=" 和 ">=" 有不一样的优先级.
表 4-1. 操作符顺序 (优先级降序)
元素 |
优先级 |
描述 |
UNION |
左 |
SQL 选择构造(select construct) |
:: |
|
Postgres 类型转换 |
[ ] |
左 |
数组分隔符 |
. |
左 |
表/列分隔符 |
- |
右 |
负(unary minus ) |
: |
右 |
幂 |
| |
左 |
间隔开始(start of interval ) |
* / % |
左 |
乘,除,模除 |
+ - |
左 |
加减 |
IS |
|
测试 TRUE, FALSE, NULL |
ISNULL |
|
测试 NULL |
NOTNULL |
|
测试 NOT NULL |
(所有其他操作符) |
|
本地和用户定义 |
IN |
|
设置成员(set membership) |
BETWEEN |
|
包含 |
OVERLAPS |
|
时间间隔重叠 |
LIKE |
|
字符串模式匹配 |
< > |
|
布尔不相等 |
= |
右 |
相等 |
NOT |
右 |
非 |
AND |
左 |
逻辑与 |
OR |
左 |
逻辑或 |