BITAND、 BITANDNOT、 BITOR、 BITXOR、および BITNOT スカラー関数

これらのビット単位関数は、入力引数の整数値の「2 の補数」表現による演算を行い、結果として、対応する 10 進数の値を入力引数のデータ・タイプに応じたデータ・タイプで戻します。

Read syntax diagramSkip visual syntax diagramBITANDBITANDNOTBITORBITXOR(expression1,expression2 )
Read syntax diagramSkip visual syntax diagramBITNOT(expression)

スキーマは SYSIBM です。

表 1. ビット操作関数
関数 説明 結果の 2 の補数表現内のビットは、以下のとおりです。
BITAND ビット単位 AND 演算を実行します。 両方の引数内の対応するビットが 1 である場合は、1 のみ。
BITANDNOT 2 番目の引数内にある、最初の引数のすべてのビットをクリアします。 2 番目の引数内の対応するビットが 1 の場合はゼロ。そうでない場合、結果は最初の引数内の対応するビットからコピーされます。
BITOR ビット単位 OR 演算を実行します。 両方の引数内の対応するビットがゼロでない限り、1。
BITXOR ビット単位排他 OR 演算を実行します。 両方の引数内の対応するビットが同じでない限り、1。
BITNOT ビット単位 NOT 演算を実行します。 引数内の対応するビットと反対のもの。
expression または expression1 または expression2
引数は、データ・タイプ SMALLINT、INTEGER、BIGINT、または DECFLOAT により表される整数値でなければなりません。 タイプ DECIMAL、REAL、または DOUBLE の引数は、DECFLOAT へのキャストです。 値は切り捨てられて整数になります。

ビット操作関数は、SMALLINT の場合は最大で 16 ビット、INTEGER の場合は 32 ビット、BIGINT の場合は 64 ビット、および DECFLOAT の場合は 113 ビットまで操作できます。 サポートされる DECFLOAT 値の範囲には -2112 から 2112 -1 までの整数が含まれ、NaN や INFINITY などの特殊値はサポートされません (SQLSTATE 42815)。 2 つの引数が異なるデータ・タイプを持つ場合、より少ないビットをサポートする引数が、より多くのビットをサポートする引数のデータ・タイプを持つ値にキャストされます。 このキャストは、負の値に設定されるビットに影響を与えます。 例えば、SMALLINT 値としての -1 は、1 に設定された 16 ビットを持ち、これは INTEGER 値にキャストされると、1 に設定された 32 ビットを持ちます。

2 つの引数を持つ関数の結果は、プロモーション用のデータ・タイプ優先順位リスト内で最高位の引数のデータ・タイプを持ちます。 いずれかの引数が DECFLOAT である場合、結果のデータ・タイプは DECFLOAT(34) です。 引数のいずれかが NULL 値になる可能性がある場合、 結果も NULL 値になる可能性があります。 引数のいずれかが NULL 値の場合、その結果は NULL 値です。

BITNOT 関数の結果は、入力引数として同じデータ・タイプを持ちます。ただし DECIMAL、REAL、DOUBLE、または DECFLOAT(16) は DECFLOAT(34) を戻します。 引数が NULL になる可能性がある場合、結果も NULL になる可能性があります。 引数が NULL であれば、結果は NULL 値です。

データ・タイプ別の、および異なるハードウェア・プラットフォーム上での内部表記の相違が原因で、BIT 関数の結果および引数の内部表記を表示または比較するための関数 (HEX など) またはホスト言語構造の使用は、データ・タイプ依存であり、移植不可です。 データ・タイプおよびプラットフォームに依存せずに BIT 関数の結果および引数を表示または比較する方法は、実際の整数値を使用することです。

値のビットの切り替えには、BITXOR 関数の使用を推奨します。 ビットをクリアするには、BITANDNOT 関数を使用します。 BITANDNOT(val, pattern) は、BITAND(val, BITNOT(pattern)) よりも効率的に操作を行います。

以下の例は、INTEGER タイプの PROPERTIES 列を持つ ITEM 表に基づいています。

  • 例 1: 3 番目のプロパティー・ビットが設定されるすべての項目を戻します。
       SELECT ITEMID FROM ITEM
         WHERE BITAND(PROPERTIES, 4) = 4
  • 例 2: 4 番目または 6 番目のプロパティー・ビットが設定されるすべての項目を戻します。
       SELECT ITEMID FROM ITEM
         WHERE BITAND(PROPERTIES, 40) <> 0
  • 例 3: ID が 3412 の項目の 12 番目のプロパティーをクリアします。
       UPDATE ITEM
           SET PROPERTIES = BITANDNOT(PROPERTIES, 2048)
         WHERE ITEMID = 3412
  • 例 4: ID が 3412 の項目の 5 番目のプロパティーを設定します。
       UPDATE ITEM
           SET PROPERTIES = BITOR(PROPERTIES, 16)
         WHERE ITEMID = 3412
  • 例 5: ID が 3412 の項目の 11 番目のプロパティーを切り替えます。
       UPDATE ITEM
           SET PROPERTIES = BITXOR(PROPERTIES, 1024)
         WHERE ITEMID = 3412
  • 例 6: 2 番目のビットだけがオンになっている 16 ビット値のすべてのビットを切り替えます。
       VALUES BITNOT(CAST(2 AS SMALLINT))
    -3 を (データ・タイプ SMALLINT で) 戻します。