★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 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型の値のことです。通常の比較演算子に加え、表9-10に示す演算子も使用可能です。&|#のビット文字列オペランドは同一長でなければなりません。ビットシフト処理の際、例に示す通り元の長さは保持されます。

表 9-10. ビット文字列演算子

演算子説明結果
|| 結合B'10001' || B'011'10001011
& ビットのANDB'10001' & B'01101'00001
| ビットのORB'10001' | B'01101'11101
# ビットのXORB'10001' # B'01101'11100
~ ビットのNOT~ B'10001'01110
<< ビットの左シフトB'10001' << 301000
>> ビットの右シフトB'10001' >> 200100

次の標準SQL関数は文字列同様にビット文字列で動作します。 length, bit_length, octet_length, position, substring, overlay.

次の関数はバイナリ同様にビット文字列で動作します。 get_bit, set_bit. ビット文字列に処理を行った場合、これらの関数は文字列の最初(一番左)のビットを0として数えます。

さらに、bit型から整数値にキャストすることも整数からbit型にキャストすることも可能です。以下に例を示します。(訳注:原文はintegral valueとなっていますがinteger valueとして訳出)

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

単に"bit"にキャストすることはbit(1)にキャストすることを意味することに注意してください。つまり、単に整数の最下位ビットのみがわたされることになります。

注意: PostgreSQL 8.0より前まででは、整数をbit(n)にキャストすると、整数の最上位ビットからnビットまでがコピーされました。現在は最下位ビットからnビット分複写されます。また、整数からビット数が元の整数より多いビット文字列にキャストする際、符号ビットでその左部分を拡張します。