当前位置:早雪网网络学院编程文档数据库技术Postgresql → PostgreSQL7.0手册-用户手册-4. 操作符

PostgreSQL7.0手册-用户手册-4. 操作符

减小字体 增大字体 作者:不详  来源:supcode.com收集整理  发布时间:2005-7-23 12:18:23
第四章. 操作符
内容 
语法优先级 
通用操作符 
数字操作符 
几何操作符 
时间间隔操作符 
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 左 逻辑或 



--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

通用操作符
这里列出的操作符是为一些常用数据类型定义的,其范围从数字类型到日期/时间类型。 
表 4-2. Postgres 操作符 
  操作符 描述 例子 
<  小于? 1 < 2 
<=  小于或等于? 1 <= 2 
<>  不等于? 1 <> 2 
=  等于? 1 = 1 
>  大于? 2 > 1 
>=  大于或等于? 2 >= 1 
||  字符串连接 'Postgre' || 'SQL' 
!!=  不在...里 3 !!= i 
~~  像 'scrappy,marc,hermit' ~~ '%scrappy%' 
!~~  不像 'bruce' !~~ '%al%' 
~  匹配 (规则表达式), 大小写相关 'thomas' ~ '.*thomas.*' 
~*  匹配 (规则表达式), 大小写无关 'thomas' ~* '.*Thomas.*' 
!~  不匹配(规则表达式), 大小写相关 'thomas' !~ '.*Thomas.*' 
!~*  不匹配(规则表达式), 大小写无关 'thomas' !~ '.*vadim.*' 



--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

数字操作符
Table 4-3. Postgres Numerical Operators 
  操作符 描述 例子 
!  阶乘 3 ! 
!!  阶乘 (左操作符) !! 3 
%  取模 5 % 4 
%  取整 % 4.5 
*  乘 2 * 3 
+  加 2 + 3 
-  减 2 - 3 
/  除 4 / 2 
:  自然幂 : 3.0 
@  绝对值 @ -5.0 
^  求幂 2.0 ^ 3.0 
|/  平方根 |/ 25.0 
||/  立方根 ||/ 27.0 

注意:两个操作符:":" 和 ";",现在被减少使用,并将在下一个版本删除。使用对应的函数 exp() 和 ln()。

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

几何操作符
表 4-4. 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))'::polygo

[1] [2]  下一页

[数据载入中...] [返回上一页] [打 印]