PostgreSQL基础知识之SQL操作符实践指南

2020-05-31 11:00:38丽君

关于 NOT 结果,在这里不做示例,有兴趣的可以下去自行验证。

算数操作符

PostgreSQL中的算数操作符号有 +(加法) 、-(减法) 、* (乘法)、/(除法) 、%(取余)、^(幂运算符)、|/(平方根)、||/(立方根)、!(阶乘[后缀])、!!(阶乘[前缀])、@(绝对值)、&(按位与)、|(按位或)、#(按位异或)、~(按位取反)、<<(左移)、>>(右移)操作符,这些操作符简化了数学运算方式。

示例:

加减乘除示例在此略。此示例重点介绍一下后面的操作符号。

hrdb=> --%取余操作符,5 除以 3 ,返回余数 2
hrdb=> SELECT 5 % 3 AS result;
 result 
--------
  2
(1 row)

hrdb=> --^求幂操作,3 的 4次方为81
hrdb=> SELECT 3^4 AS result;
 result 
--------
  81
(1 row)

hrdb=> --|/平方根,25的平方根为 5
hrdb=> SELECT |/ 25 AS result;
 result 
--------
  5
(1 row)

hrdb=> --||/立方根,27 的立方根为 3
hrdb=> SELECT ||/ 27 AS result;
  result  
--------------------
 3.0000000000000004
(1 row)

hrdb=> --!阶乘后缀,5的阶乘为 120
hrdb=> SELECT 5 ! AS result;
 result 
--------
 120
(1 row)

hrdb=> --!!阶乘前缀,5的阶乘为 120
hrdb=> SELECT !! 5 AS result;
 result 
--------
 120
(1 row)

hrdb=> --@绝对值,-1的绝对值为 1
hrdb=> SELECT @ -1 AS result;
 result 
--------
  1
(1 row)

hrdb=> --& 按位与,5 & 3的值为 1
hrdb=> --计算过程
hrdb=> --5 用二进制表示 0000 0101
hrdb=> --3 用二进制表示 0000 0011
hrdb=> --按位与操作,同时为1则为1,否则为0
hrdb=> --按位与操作,同时为1则为1,否则为0
hrdb=> -- 5 & 3   0000 0001 再转换为10进制为 1
hrdb=> SELECT 5 & 3 AS result;
 result 
--------
  1
(1 row)

hrdb=> --| 按位或,6 | 3 的值为 7
hrdb=> --计算过程
hrdb=> --6 用二进制表示 0000 0110
hrdb=> --3 用二进制表示 0000 0011
hrdb=> --按位或操作,只要有一个为1则为1
hrdb=> --6 | 3   0000 0111 转换为10进制为7
hrdb=> SELECT 6 | 3 AS result;
 result 
--------
  7
(1 row)

hrdb=> --# 按位异或,8 # 5 的值为13
hrdb=> --计算过程
hrdb=> --8 用二进制表示 0000 1000
hrdb=> --5 用二进制表示 0000 0101
hrdb=> --按位异或操作,不同为1,相同为0
hrdb=> --8 # 5   0000 1101 转换为10进制为 13
hrdb=> SELECT 8 # 5 AS result;
 result 
--------
  13
(1 row)

hrdb=> --~按位取反,7 按位取反的值为 16
hrdb=> --计算过程 
hrdb=> --7 用二进制表示 0000 0111
hrdb=> --按位取反,最高位为0 取 1表示符号,其余按位取反
hrdb=> --~7    1000 1000 转换为10进制为-8
hrdb=> SELECT ~7 AS result;
 result 
--------
  -8
(1 row)

hrdb=> --<<左移,4 左移 2位的值为:
hrdb=> --计算过程
hrdb=> --4用二进制表示 0000 0100
hrdb=> --4左移两位 000001 0000 位数不足用 0 补位
hrdb=> --转换为10进制后为 16。因此左移类似于平方操作,但是效率比平方高
hrdb=> SELECT 4 << 2 AS result;
 result 
--------
  16
(1 row)

hrdb=> -->>右移,8 右移 3 位的值为1
hrdb=> --8 用二进制表示 0000 1000
hrdb=> --8 >> 3 ,   0 0001000 多出的0去掉转换为10进制,为1
hrdb=> SELECT 8 >> 3 AS result;
 result 
--------
  1
(1 row)								 
			 
相关文章 大家在看