bit 函数和操作符

MySQL

&Bitwise AND
<<Left shift
>>Shift right
BIT_COUNTReturns the number of set bits
^Bitwise XOR
|Bitwise OR
~Bitwise NOT

PostgreSQL

Operator Description Example Result
|| concatenation B'10001' || B'011' 10001011
& bitwise AND B'10001' & B'01101' 00001
| bitwise OR B'10001' | B'01101' 11101
# bitwise XOR B'10001' # B'01101' 11100
~ bitwise NOT ~ B'10001' 01110
<< bitwise shift left B'10001' << 3 01000
>> bitwise shift right B'10001' >> 2 00100

PostgreSQL bit_count

需要自定义, 写两个C函数来解决

> vi bit_count.c
#include "postgres.h"
#include "fmgr.h"
#include "utils/varbit.h"
PG_MODULE_MAGIC;PG_FUNCTION_INFO_V1(bit_count1);
PG_FUNCTION_INFO_V1(bit_count2);Datum
bit_count1(PG_FUNCTION_ARGS)
{VarBit     *arg = PG_GETARG_VARBIT_P(0);uint32          mask;bits8      *r;int                     nbits = 0;/* Check that the bit string is not too long */if (VARBITLEN(arg) > 32)ereport(ERROR,(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),errmsg("integer out of range")));mask = 0;for (r = VARBITS(arg); r < VARBITEND(arg); r++){mask <<= BITS_PER_BYTE;mask |= *r;}/* Now shift the mask to take account of the padding at the end */mask >>= VARBITPAD(arg);/* this code relies on mask being an unsigned type */while (mask){if (mask & 1)nbits++;mask >>= 1;}PG_RETURN_INT32(nbits);
}Datum
bit_count2(PG_FUNCTION_ARGS)
{uint32          mask = PG_GETARG_INT32(0);int                     nbits = 0;while (mask){if (mask & 1)nbits++;mask >>= 1;}PG_RETURN_INT32(nbits);
}> gcc -O3 -Wall -Wextra -Werror -I /home/digoal/postgresql-9.5.0/src/include -g -fPIC -c ./bit_count.c -o bit_count.o
> gcc -O3 -Wall -Wextra -Werror -I /home/digoal/postgresql-9.5.0/src/include -g -shared bit_count.o -o libbit_count.so
> cp libbit_count.so /home/digoal/pgsql9.5/lib/
> psql
postgres=# create or replace function bit_count(varbit) returns int as '$libdir/libbit_count.so', 'bit_count1' language c strict ;
CREATE FUNCTION
postgres=# create or replace function bit_count(int) returns int as '$libdir/libbit_count.so', 'bit_count2' language c strict ;
CREATE FUNCTION
postgres=# select bit_count(bit'1111');bit_count
-----------4
(1 row)
postgres=# select bit_count(bit'1111011001');bit_count
-----------7
(1 row)postgres=# select bit_count(99);bit_count
-----------4
(1 row)postgres=# select bit_count(10);bit_count
-----------2
(1 row)

PostgreSQL还支持set_bit

set_bit
postgres=#  select set_bit(bit'11111',1,0);set_bit
---------10111
(1 row)
postgres=#  select set_bit(bit'11111',0,0);set_bit
---------01111
(1 row)

PostgreSQL MySQL 兼容性之 - bit 函数和操作符相关推荐

  1. PostgreSQL学习笔记5之函数和操作符一

    一.逻辑操作符: 常用的逻辑操作符有:AND.OR和NOT.其语义与其它编程语言中的逻辑操作符完全相同. 二.比较操作符: 下面是PostgreSQL中提供的比较操作符列表: 操作符 描述 < ...

  2. PostgreSQL学习笔记7之函数和操作符三

    九.序列操作函数: 序列对象(也叫序列生成器)都是用CREATE SEQUENCE创建的特殊的单行表.一个序列对象通常用于为行或者表生成唯一的标识符.下面序列函数,为我们从序列对象中获取最新的序列值提 ...

  3. PostgreSQL学习笔记6之函数和操作符二

    六.模式匹配: PostgreSQL中提供了三种实现模式匹配的方法:SQL LIKE操作符,更近一些的SIMILAR TO操作符,和POSIX-风格正则表达式.     1. LIKE:     st ...

  4. PostgreSQL mysql 兼容性之 - 字符编码转换 CONVERT

    PostgreSQL 字符集转换方法 postgresql支持的转换函数如下: mysql中的blob类型在pgsql中以bytea类型替代,但是在解析bytea格式的时候mysql使用convert ...

  5. PostgreSQL MySQL 兼容性之 - Gis类型

    PostGIS的GIS功能相比MySQL强大太多,本文仅仅列举了MySQL支持的部分. 欲了解PostGIS请参考: http://postgis.net/docs/manual-2.2/refere ...

  6. PostgreSQL学习手册(五) 函数和操作符

    PostgreSQL学习手册(五) 函数和操作符 一.逻辑操作符:     常用的逻辑操作符有:AND.OR和NOT.其语义与其它编程语言中的逻辑操作符完全相同. 二.比较操作符:     下面是Po ...

  7. PostgreSQL常用函数以及操作符

    一.逻辑操作符: 常用的逻辑操作符有:AND.OR和NOT.其语义与其它编程语言中的逻辑操作符完全相同. 二.比较操作符: 下面是PostgreSQL中提供的比较操作符列表: 操作符 描述 < ...

  8. PostgreSQL之函数和操作符

    一.逻辑操作符: 常用的逻辑操作符有:AND.OR和NOT.其语义与其它编程语言中的逻辑操作符完全相同. 二.比较操作符: 下面是PostgreSQL中提供的比较操作符列表: 操作符 描述 < ...

  9. MySQL函数和操作符(超详细,备着查找)

    一.操作符 1.1 操作符优先级 以下列表显示了操作符优先级的由低到高的顺序.排列在同一行的操作符具有相同的优先级. 操作符 优先级 := 1 ||, OR, XOR 2 &&, AN ...

最新文章

  1. 如何设置MySQL的时区?
  2. 好技术领导和差技术领导区别在哪里
  3. 绝地求生国际服服务器维护到几点,绝地求生更新维护到今天几点?更新内容详细介绍...
  4. CVPR19 基于图卷积网络的多标签图像识别模型 论文笔记
  5. null对象访问static属性或方法
  6. [1424] 金克拉与贪吃蛇的故事
  7. python获取键盘输入_Python 3 学习笔记之——键盘输入和读写文件
  8. 之间有什么区别。 (点)和$(美元符号)?
  9. 强化学习(一)---马尔科夫决策过程
  10. C# 缓存学习第一天
  11. 2021-04-18
  12. java实现MD5加密的三种方式
  13. 人声修音插件 – Antares Auto-Tune Pro 9.1.0.5 WiN
  14. C++中头文件iostream介绍
  15. 第三阶段应用层——1.2 数码相册—字符编码
  16. XCEL查找SQL SERVER数据库的数据
  17. 用H5新特性canvas绘制一个钟表
  18. 美团CAT客户端接入方式
  19. uboot mmc 命令 read write 说明
  20. SyntaxError: Unexpected token o in JSON at position 1 JSON.parse (<anonymous>)

热门文章

  1. Notepad++安装教程
  2. python判断英文字母_Python判断两个单词的相似度
  3. 秒后面的单位是什么_比光年还大的长度单位,你知道几个?
  4. Bentley MicroStation V8i安装教程
  5. Qt学习(一):两个独立窗口的信号通信
  6. java游戏模拟器mx5_OPPO华为VIVO魅族金立电脑手游安卓模拟器官方下载
  7. kafka消费并导出_如何使用Docker内的Kafka服务?消息服务测试实践篇
  8. SQLite学习手册(内存数据库)
  9. 关于决策树,你一定要知道的知识点!(文末送书)
  10. 【NLP】NLP实战篇之bert源码阅读(run_classifier)