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

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

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

第 9 章 运算符

Postgres 在系统类型上提供大量内建运算符。这些运算符声明在系统目录 pg_operator 中。pg_operator 中的每个条目都包括实现该运算符的过程的名称以及输入和输出类型的类 OIDs。

要查看 “||” 字符串连接运算符的所有变体,可以试试

    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)

表 9.1. Postgres 运算符

运算符描述用法
< 小于?1 < 2
<= 小于等于?1 <= 2
<> 不等于?1 <> 2
= 等于?1 = 1
> 大于?2 > 1
>= 大于等于?2 >= 1
|| 连接字符串'Postgre' || 'SQL'
!!= NOT IN3 !!= i
~~ LIKE'scrappy,marc,hermit' ~~ '%scrappy%'
!~~ NOT LIKE'bruce' !~~ '%al%'
~ 匹配(正则),区分大小写'thomas' ~ '*.thomas*.'
~* 匹配(正则),不区分大小写'thomas' ~* '*.Thomas*.'
!~ 不匹配(正则),区分大小写'thomas' !~ '*.Thomas*.'
!~* 不匹配(正则),不区分大小写'thomas' !~ '*.vadim*.'


表 9.2. Postgres 数值运算符

运算符描述用法
! 阶乘3 !
!! 阶乘(左运算符)!! 3
% 取模5 % 4
% 截断% 4.5
* 乘法2 * 3
+ 加法2 + 3
- 减法2 - 3
/ 除法4 / 2
: 自然指数: 3.0
; 自然对数(; 5.0)
@ 绝对值@ -5.0
^ 幂运算2.0 ^ 3.0
|/ 平方根|/ 25.0
||/ 立方根||/ 27.0


表 9.3. Postgres 几何运算符

运算符描述用法
+ 平移'((0,0),(1,1))'::box + '(2.0,0)'::point
- 平移'((0,0),(1,1))'::box - '(2.0,0)'::point
* 缩放/旋转'((0,0),(1,1))'::box * '(2.0,0)'::point
/ 缩放/旋转'((0,0),(2,2))'::box / '(2.0,0)'::point
# 相交'((1,-1),(-1,1))' # '((1,1),(-1,-1))'
# 多边形的点数# '((1,0),(0,1),(-1,0))'
## 最近点'(0,0)'::point ## '((2,0),(0,2))'::lseg
&& 重叠?'((0,0),(1,1))'::box && '((0,0),(2,2))'::box
&< 在左侧重叠?'((0,0),(1,1))'::box &< '((0,0),(2,2))'::box
&> 在右侧重叠?'((0,0),(3,3))'::box &> '((0,0),(2,2))'::box
<-> 间距'((0,0),1)'::circle <-> '((5,0),1)'::circle
<< 在左边?'((0,0),1)'::circle << '((5,0),1)'::circle
<^ 在下方?'((0,0),1)'::circle <^ '((0,5),1)'::circle
>> 在右边?'((5,0),1)'::circle >> '((0,0),1)'::circle
>^ 在上方?'((0,5),1)'::circle >^ '((0,0),1)'::circle
?# 相交或重叠'((-1,0),(1,0))'::lseg ?# '((-2,-2),(2,2))'::box;
?- 是水平的?'(1,0)'::point ?- '(0,0)'::point
?-| 是垂直的?'((0,0),(0,1))'::lseg ?-| '((0,0),(1,0))'::lseg
@-@ 长度或周长@-@ '((0,0),(1,0))'::path
?| 是竖直的?'(0,1)'::point ?| '(0,0)'::point
?|| 是平行的?'((-1,0),(1,0))'::lseg ?|| '((-1,2),(1,2))'::lseg
@ 包含于或位于'(1,1)'::point @ '((0,0),2)'::circle
@@ 圆心@@ '((0,0),10)'::circle
~= 等于'((0,0),(1,1))'::polygon ~= '((1,1),(0,0))'::polygon


时间区间数据类型 tinterval 是最初的日期时间类型留下的遗产,不像更现代的类型那样受到良好支持。此类型有几个运算符。

表 9.4. Postgres 时间区间运算符

运算符描述用法
#< 区间小于? 
#<= 区间小于等于? 
#<> 区间不等于? 
#= 区间等于? 
#> 区间大于? 
#>= 区间大于等于? 
<#> 转换为时间区间 
<< 区间小于? 
| 区间的起点 
~= 等于 
<?> 时间在区间内? 


用户可以用运算符名称调用运算符,例如:

select * from emp where salary < 40000;

或者,用户也可以直接调用实现这些运算符的函数。此时上面的查询将写作:

select * from emp where int4lt(salary, 40000);

psql 有一个 \dd 命令用于显示这些运算符。

报告文档问题

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