购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.6 位串类型

位串类型是可以存放一系列二进制位的类型,相对于二进制类型来说,此类型在做一些位操作更方便、更直观,本节将详细讲解它们的使用方法。

5.6.1 位串类型介绍

位串就是一串由1和0组成的字符串。PostgreSQL中可以直观地显式操作二进制位。下面是两种SQL位类型:

·bit(n)。

·bit varying(n)。

其中n是一个正整数。

bit(n)类型的数据必须准确匹配长度n,试图存储短一些或者长一些的数据都是错误的。

bit varying(n)类型的数据是最长为n的变长类型,更长的串会被拒绝。写一个没有长度的bit等效于bit(1),没有长度的bit varying表示没有长度限制。

如果明确地把一个位串值转换成bit(n),那么它的右边将被截断,或者在右边补齐0到刚好为n位,而不会抛出任何错误。类似地,如果明确地把一个位串数值转换成bit varying(n),而其超过n位,那么它的右边将被截断。

5.6.2 位串类型的使用方法

下面介绍位串类型的使用方法,首先创建一个测试表,示例如下:


CREATE TABLE test (a BIT(3), b BIT VARYING(5));

插入一条测试数据:


osdba=# INSERT INTO test VALUES (B'101', B'00');
INSERT 0 1

对于bit(n)字段,如果插入的数据的长度小于定义的长度n或超过了定义的长度n都将报错:


osdba=# INSERT INTO test VALUES (B'10', B'101');
ERROR:  bit string length 2 does not match type bit(3)
osdba=# INSERT INTO test VALUES (B'11110', B'101');
ERROR:  bit string length 5 does not match type bit(3)

对于bit varying(n),如果插入的数据超过了匹配的长度n也会报错:


osdba=# INSERT INTO test VALUES (B'110', B'111101');
ERROR:  bit string too long for type bit varying(5)

5.6.3 位串的操作符及函数

位串除了常用的比较操作符之外,主要支持一些位运算的操作符,具体见表5-13。

表5-13 位串类型的操作符

下列SQL标准函数既可以用于字符串,也可以用于位串:

·length。

·bit_length。

·octet_length。

·position。

·substring。

·overlay。

下列函数既支持二进制字符串,也可用于位串:

·get_bit。

·set_bit。

当用于位串时,上述函数的位数将以串(最左边)的第一位作为0位。

另外,可以在整数和bit之间进行转换。示例如下:


osdba=# select 66::bit(10);
    bit     
------------
  0001000010
(1 row)

osdba=# select 66::bit(3);
  bit 
-----
  010
(1 row)

osdba=# select cast(-66 as bit(12));
     bit      
--------------
  111110111110
(1 row)

下面来看一下PostgreSQL中十进制、十六进制、二进制之间的转换示例。

十进制转二进制的示例如下:


osdba=# select 85::bit(8);
    bit    
----------
  01010101
(1 row)

十六进制转二进制的示例如下:


osdba=# select 'xff'::bit(8);
    bit    
----------
  11111111
(1 row)

十六进制转十进制的示例如下:


osdba=# select 'xff'::bit(8)::int;
  int4 
------
   255
(1 row)

十进制转十六进制的示例如下: GlDkkrZ2ea/YQCl/elC5uFY0/b4Hk1M/OzpuGGwmMPsdtkouZOaKol6SiShe/aCo


osdba=# select to_hex(255);
  to_hex
--------
  ff
(1 row)

点击中间区域
呼出菜单
上一章
目录
下一章
×