すべてのプロダクト
Search
ドキュメントセンター

PolarDB:バイナリ文字列関数と演算子

最終更新日:May 31, 2024

このセクションでは、bytea型の値であるバイナリ文字列を調べて操作するための関数と演算子について説明します。 これらの多くは、目的と構文において、前のセクションで説明したテキスト文字列関数と同等です。

SQLは、引数を区切るためにコンマではなくキーワードを使用するいくつかの文字列関数を定義します。 PostgreSQLは、通常の関数呼び出し構文を使用するこれらの関数のバージョンも提供します。

SQLバイナリ文字列関数と演算子

bytea | byteabytea

2つのバイナリ文字列を連結します。

'\x123456'::bytea | |'\x789a00bcde'::bytea\x123456789a00bcde

bit_length (bytea) → integer

バイナリ文字列のビット数を返します (theoctet_lengthの8倍) 。

bit_length('\x123456'::bytea)24

octet_length (bytea) → integer

バイナリ文字列のバイト数を返します。

octet_length('\x123456'::bytea)3

overlay (bytes bytea PLACING bysubstring bytea FROM start integer [FOR count integer] ) → bytea

start番目のバイトから始まりcount bytesまで伸びるbytesの部分文字列をnewsubstringに置き換えます。 countを省略した場合、デフォルトではnewsubstringの長さになります。

overlay('\x1234567890'::bytea placing'\002\003 '::bytea from 2 for 3)\x12020390

position (substring bytea IN bytes bytea) → integer

指定された部分文字列の最初の開始インデックスをバイト以内に返します。存在しない場合はゼロです。

位置 ('\x5678'::bytea in'\x1234567890'::bytea)3

部分文字列 (bytes bytea [FROM start integer] [FOR count integer] ) → bytea

指定されている場合は、開始番目のバイトからバイトの部分文字列を抽出し、指定されている場合はcount bytesの後に停止します。 startcountの少なくとも1つを指定します。

部分文字列 ('\x1234567890'::bytea from 3 for 2)\x5678

trim ( [両方] bytesremoved bytea FROM bytea) → bytea

バイトの開始、終了、または両端 (デフォルトは両方) から、bytesremovedに表示されるバイトのみを含む最長文字列を削除します。

トリム ('\x9012'::bytea from'\x1234567890'::bytea)\x345678

trim ( [両方] [FROM] bytes bytea, bytesremoved bytea) → bytea

これは、trim() の非標準構文です。

trim (両方とも '\x1234567890'::bytea、'\x9012'::byteaから)\x345678

追加のバイナリ文字列操作関数が利用可能であり、以下の表にリストされています。 それらの一部は、上記の表にリストされているSQL標準の文字列関数を内部で実装するために使用されます。

その他のバイナリ文字列関数

btrim (bytes bytea, bytesremoved bytea) → bytea

バイトの先頭と末尾からbytesremovedに表示されるバイトのみを含む最長文字列を削除します。

btrim('\x1234567890'::bytea, '\x9012'::bytea)\x345678

get_bit (bytes bytea, n bigint) → integer

バイナリ文字列からn番目のビットを抽出します。

get_bit('\x1234567890'::bytea, 30)1

get_byte (bytes bytea, n integer) → integer

バイナリ文字列からn番目のバイトを抽出します。

get_byte('\x1234567890'::bytea, 4)144

length (bytea) → integer

バイナリ文字列のバイト数を返します。

length('\x1234567890'::bytea)5

length (bytes bytea, encoding name) → integer

指定されたエンコーディングのテキストであると仮定して、バイナリ文字列の文字数を返します。

長さ ('jose'::bytea, 'UTF8')4

md5 (bytea) → テキスト

バイナリ文字列のMD5ハッシュを計算し、結果を16進数で記述します。

md5('Th\000omas'::bytea)8ab2d3c9689aaf18b4958c334c82d8b 1

set_bit (bytes bytea, n bigint, newvalue integer) → bytea

バイナリ文字列のn番目のビットをnewvalueに設定します。

set_bit('\x1234567890'::bytea, 30, 0)\x1234563890

set_byte (bytes bytea, n integer, newvalue integer) → bytea

バイナリ文字列のn番目のバイトをnewvalueに設定します。

set_byte('\x1234567890'::bytea, 4, 64)\x1234567840

sha224 (bytea) → bytea

バイナリ文字列のSHA-224ハッシュを計算します。

sha224('abc'::bytea)\x23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7

sha256 (bytea) → bytea

バイナリ文字列のSHA-256ハッシュを計算します。

sha256('abc'::bytea)\xba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

sha384 (bytea) → bytea

バイナリ文字列のSHA-384ハッシュを計算します。

sha384('abc'::bytea)\xcb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7

sha512 (bytea) → bytea

バイナリ文字列のSHA-512ハッシュを計算します。

sha512('abc'::bytea)\xddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f

substream (bytes bytea, start integer [, count integer] ) → bytea

開始番目のバイトからバイトの部分文字列を抽出し、指定されている場合はcountバイトまで拡張します。 (substring(fromfor) と同じです。)

substream ('\x1234567890'::bytea, 3, 2)\x5678

関数get_byteおよびset_byteは、バイナリ文字列の最初のバイトをバイト0として指定します。 関数get_bitおよびset_bitは、各バイト内の右からビットを番号付けます。たとえば、ビット0は最初のバイトの最下位ビットであり、ビット15は2番目のバイトの最上位ビットです。

歴史的な理由から、関数md5text型の16進エンコードされた値を返しますが、SHA-2関数はbytea型を返します。 関数encodedecodeを使用して、2つを変換します。 たとえば、encode(sha256('abc'), 'hex') を書いて16進符号化テキスト表現を取得し、decode(md5('abc'), 'hex') を書いてbytea値を取得します。

異なる文字セット間で文字列を変換する関数 (エンコーディング) 、および任意のバイナリデータをテキスト形式で表す関数を以下の表に示します。 これらの関数では、text型の引数または結果はデータベースの既定のエンコーディングで表現され、bytea型の引数または結果は別の引数によって名前が付けられたエンコーディングで表現されます。

テキスト /バイナリ文字列変換関数

convert (bytes bytea, src_encoding name, dest_encoding name) → bytea

src_encodingのテキストを表すバイナリ文字列を、dest_encodingのバイナリ文字列に変換します。

convert('text_in_utf8 ', 'UTF8', 'LATIN1')\x746578745f696e5f75746638

convert_from (bytes bytea, src_encoding name) → text

src_encodingのテキストを表すバイナリ文字列を、データベースエンコーディングのtextに変換します。

convert_from('text_in_utf8' 、'UTF8')text_in_utf8

convert_to (string text, dest_encoding name) → bytea

データベースエンコード内のtext文字列を、エンコードdest_encodingでエンコードされたバイナリ文字列に変換します。

convert_to('some_text', 'UTF8')\x736f6d655f74657874

encode (bytes bytea, format text) → text

バイナリデータをテキスト表現にコードします。サポートされるフォーマット値は、base64escapehexです。

エンコード ('123\000\001 ', 'base64')MTIzAAE=

decode (string text, format text) → bytea

テキスト表現からバイナリデータをデコードします。サポートされるフォーマット値は、エンコードと同じです。

decode('MTIzAAE=', 'base64')\x3132330001

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ビットを、各バイトの上位桁を最初に書き込む0fの1つの16進桁として表す。 encode関数は、a-f 16進数を小文字で出力します。 データの最小単位は8ビットであるため、エンコードによって返される文字は常に偶数です。 decode関数は、大文字または小文字のa-f文字を受け取ります。 decodeに無効な16進データが与えられた場合 (奇数の文字が与えられた場合を含む) 、エラーが発生します。