他のバージョンの文書 16 | 15 | 14 | 13 | 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 | 7.4 | 7.3 | 7.2

9.6. ビット文字列関数と演算子 #

本節ではbit型とbit varying型の値であるビット文字列を調べたり操作するための関数と演算子について説明します。 (この表ではbit型だけが言及されていますが、bit varying型も同じように使用できます。) ビット文字列は表 9.1で示す通常の比較演算子および表 9.14で言及している演算子もサポートします。

表9.14 ビット文字列演算子

演算子

説明

bit || bitbit

結合

B'10001' || B'011'10001011

bit & bitbit

ビット単位のAND(入力は同じ長さでなければなりません)

B'10001' & B'01101'00001

bit | bitbit

ビット単位のOR(入力は同じ長さでなければなりません)

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

ビット文字列中のセットされているビットの数を返します(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

bitsstart番目のビットからcountビットをnewsubstringで置き換えます。 countを省略するとnewsubstringの長さがデフォルトになります。

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

position ( substring bit IN bits bit ) → integer

bits中のsubstringで指定する最初の文字列開始位置を返します。その文字列が存在しなければ0を返します。

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

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

start番目の文字で始まるbitsの部分文字列を取り出します。 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)にキャストすることを意味することに注意してください。つまり、単に整数の最下位ビットのみが渡されることになります。