2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0

9.6. 位串函式和運算子 #

本節描述用於檢查和操作位串(即 bitbit varying 型別的值)的函式和運算子。(雖然這些表中只提到了 bit 型別,但 bit varying 型別的值可以互換使用。)位串支援 表 9.1 中所示的常用比較運算子,以及 表 9.14 中所示的運算子。

表 9.14. 位串運算子

運算子

描述

示例

bit || bitbit

連線

B'10001' || B'011'10001011

bit & bitbit

按位與(輸入必須具有相同的長度)

B'10001' & B'01101'00001

bit | bitbit

按位或(輸入必須具有相同的長度)

B'10001' | B'01101'11101

bit # bitbit

按位異或(輸入必須具有相同的長度)

B'10001' # B'01101'11100

~ bitbit

按位非

~ B'10001'01110

bit << integerbit

按位左移(字串長度保持不變)

B'10001' << 301000

bit >> integerbit

按位右移(字串長度保持不變)

B'10001' >> 200100


一些可用於二進位制字串的函式也可用於位串,如 表 9.15 所示。

表 9.15. 位串函式

函式

描述

示例

bit_count ( bit ) → bigint

返回位串中設定為 1 的位數(也稱為“popcount”)。

bit_count(B'10111')4

bit_length ( bit ) → integer

返回位串中的位數。

bit_length(B'10111')5

length ( bit ) → integer

返回位串中的位數。

length(B'10111')5

octet_length ( bit ) → integer

返回位串中的位元組數。

octet_length(B'1011111011')2

overlay ( bits bit PLACING newsubstring bit FROM start integer [ FOR count integer ] ) → bit

bits 中從第 start 位開始、長度為 count 位的子串替換為 newsubstring。如果省略 count,則預設為 newsubstring 的長度。

overlay(B'01010101010101010' placing B'11111' from 2 for 3)0111110101010101010

position ( substring bit IN bits bit ) → integer

返回指定 substringbits 中首次出現的位置(從 1 開始計數),如果不存在則返回零。

position(B'010' in B'000001101011')8

substring ( bits bit [ FROM start integer ] [ FOR count integer ] ) → bit

提取 bits 中的子串。如果指定了 start,則從第 start 位開始;如果指定了 count,則提取 count 位。至少需要指定 startcount 中的一個。

substring(B'110010111111' from 3 for 2)00

get_bit ( bits bit, n integer ) → integer

從位串中提取第 n 位;最左邊的第一位是第 0 位。

get_bit(B'101010101010101010', 6)1

set_bit ( bits bit, n integer, newvalue integer ) → bit

將位串中的第 n 位設定為 newvalue;最左邊的第一位是第 0 位。

set_bit(B'101010101010101010', 6, 0)101010001010101010


此外,還可以將整數值轉換為 bit 型別,或從 bit 型別轉換回整數。將整數轉換為 bit(n) 會複製最右邊的 n 位。將整數轉換為比整數本身寬度更寬的位串會在左側進行符號擴充套件。一些示例

44::bit(10)                    0000101100
44::bit(3)                     100
cast(-44 as bit(12))           111111010100
'1110'::bit(4)::integer        14

請注意,僅轉換為 bit 意味著轉換為 bit(1),因此只返回整數的最低有效位。

提交更正

如果您在文件中發現任何不正確的內容、與您對特定功能的實際體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。