关于 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)










