このセクションでは、bytea型の値であるバイナリ文字列を調べて操作するための関数と演算子について説明します。 これらの多くは、目的と構文において、前のセクションで説明したテキスト文字列関数と同等です。
SQLは、引数を区切るためにコンマではなくキーワードを使用するいくつかの文字列関数を定義します。 PostgreSQLは、通常の関数呼び出し構文を使用するこれらの関数のバージョンも提供します。
SQLバイナリ文字列関数と演算子
2つのバイナリ文字列を連結します。
|
バイナリ文字列のビット数を返します (theoctet_lengthの8倍) 。
|
バイナリ文字列のバイト数を返します。
|
|
指定された
|
指定されている場合は、
|
|
これは、
|
追加のバイナリ文字列操作関数が利用可能であり、以下の表にリストされています。 それらの一部は、上記の表にリストされているSQL標準の文字列関数を内部で実装するために使用されます。
その他のバイナリ文字列関数
|
バイナリ文字列からn番目のビットを抽出します。
|
バイナリ文字列からn番目のバイトを抽出します。
|
バイナリ文字列のバイト数を返します。
|
指定された
|
バイナリ文字列のMD5ハッシュを計算し、結果を16進数で記述します。
|
バイナリ文字列のn番目のビットを
|
バイナリ文字列のn番目のバイトを
|
バイナリ文字列のSHA-224ハッシュを計算します。
|
バイナリ文字列のSHA-256ハッシュを計算します。
|
バイナリ文字列のSHA-384ハッシュを計算します。
|
バイナリ文字列のSHA-512ハッシュを計算します。
|
|
関数get_byteおよびset_byteは、バイナリ文字列の最初のバイトをバイト0として指定します。 関数get_bitおよびset_bitは、各バイト内の右からビットを番号付けます。たとえば、ビット0は最初のバイトの最下位ビットであり、ビット15は2番目のバイトの最上位ビットです。
歴史的な理由から、関数md5はtext型の16進エンコードされた値を返しますが、SHA-2関数はbytea型を返します。 関数encodeとdecodeを使用して、2つを変換します。 たとえば、encode(sha256('abc'), 'hex') を書いて16進符号化テキスト表現を取得し、decode(md5('abc'), 'hex') を書いてbytea値を取得します。
異なる文字セット間で文字列を変換する関数 (エンコーディング) 、および任意のバイナリデータをテキスト形式で表す関数を以下の表に示します。 これらの関数では、text型の引数または結果はデータベースの既定のエンコーディングで表現され、bytea型の引数または結果は別の引数によって名前が付けられたエンコーディングで表現されます。
テキスト /バイナリ文字列変換関数
|
|
データベースエンコード内の
|
バイナリデータをテキスト表現にコードします。サポートされる
|
テキスト表現からバイナリデータをデコードします。サポートされる
|
encodeおよびdecode関数は、次のテキスト形式をサポートしています。
base64
base64形式は、RFC 2045 Section 6.8の形式です。 RFCによると、エンコードされた行は76文字で区切られます。 しかしながら、MIME CRLFライン終端マーカの代わりに、改行のみがライン終端に使用される。decode関数は、キャリッジリターン、改行、スペース、およびタブ文字を無視します。 それ以外の場合、decodeが無効なbase64データを提供されるとエラーが発生します。脱出
エスケープ形式は、ゼロバイトと高ビットセットのバイトを8進エスケープシーケンス (\nnn) に変換し、バックスラッシュを2倍にします。 他のバイト値は、文字通りに表される。decode関数は、バックスラッシュの後に2番目のバックスラッシュまたは3つの8桁の数字が続かない場合、エラーを発生させます。他のバイト値は変更されません。ヘックス
16進フォーマットは、データの各4ビットを、各バイトの上位桁を最初に書き込む0〜fの1つの16進桁として表す。encode関数は、a-f16進数を小文字で出力します。 データの最小単位は8ビットであるため、エンコードによって返される文字は常に偶数です。decode関数は、大文字または小文字のa-f文字を受け取ります。decodeに無効な16進データが与えられた場合 (奇数の文字が与えられた場合を含む) 、エラーが発生します。