- Kategorien:
BITXOR¶
Gibt das bitweise XOR von zwei numerischen oder binären Ausdrücken zurück.
- Aliasse:
- BIT_XOR 
- Siehe auch:
Syntax¶
BITXOR( <expr1> , <expr2> [ , '<padside>' ] )
Argumente¶
- expr1
- Dieser Ausdruck muss einen INTEGER-Wert, einen BINARY-Wert oder einen Wert eines Datentyps ergeben, der in einen INTEGER-Wert umgewandelt werden kann. 
- expr2
- Dieser Ausdruck muss einen INTEGER-Wert, einen BINARY-Wert oder einen Wert eines Datentyps ergeben, der in einen INTEGER-Wert umgewandelt werden kann. 
- 'padside'
- Wenn zwei BINARY-Argumentwerte nicht die gleiche Länge haben, gibt er an, auf welcher Seite der Wert mit der kürzeren Länge aufgefüllt werden soll. Geben Sie einen der folgenden Werte an, wobei Groß- und Kleinschreibung keine Rolle spielen: - LEFT – Den Wert auf der linken Seite auffüllen. 
- RIGHT – Den Wert auf der rechten Seite auffüllen. 
 - Der kürzere Wert wird mit Nullen aufgefüllt, sodass er der Länge des längeren Werts entspricht. - Dieses Argument ist nur gültig, wenn BINARY-Ausdrücke angegeben sind. - Wenn die Länge von zwei BINARY-Werten unterschiedlich ist, ist dieses Argument erforderlich. 
Rückgabewerte¶
Gibt einen INTEGER-Wert, einen BINARY-Wert oder einen NULL-Wert zurück:
- Wenn die Eingabeausdrücke INTEGER-Werte enthalten, wird ein INTEGER-Wert zurückgegeben, der das bitweise XOR der Eingabeausdrücke darstellt. 
- Wenn die Eingabeausdrücke BINARY-Werte enthalten, wird ein BINARY-Wert zurückgegeben, der das bitweise XOR der Eingabeausdrücke darstellt. 
- Wenn einer der Eingabewerte NULL ist, wird NULL zurückgegeben. 
Nutzungshinweise¶
- Beide Eingabeausdrücke müssen einen Wert desselben Datentyps ergeben, entweder INTEGER oder BINARY. 
- Wenn der Datentyp einer der beiden Argumente numerisch aber nicht INTEGER ist (z. B. FLOAT, DECIMAL usw.), dann wird das Argument in einen INTEGER-Wert umgewandelt. 
- Wenn der Datentyp eines der beiden Argumente eine Zeichenfolge ist (z. B. VARCHAR), wird das Argument nach Möglichkeit in einen INTEGER Wert umgewandelt. So wird beispielsweise die Zeichenfolge - 12.3in- 12umgewandelt. Wenn der Wert nicht in einen INTEGER-Wert umgewandelt werden kann, wird der Wert als NULL behandelt.
- Die Funktion wandelt Argumente nicht implizit in BINARY-Werte um. 
Beispiele¶
Die folgenden Abschnitte enthalten Beispiele für INTEGER-Argumentwerte und BINARY-Argumentwerte.
Verwendung von BITAND, BITOR und BITXOR mit INTEGER-Argumentwerten¶
Erstellen Sie eine einfache Tabelle und fügen Sie die Daten ein:
CREATE OR REPLACE TABLE bits (ID INTEGER, bit1 INTEGER, bit2 INTEGER);
INSERT INTO bits (ID, bit1, bit2) VALUES 
  (   11,    1,     1),    -- Bits are all the same.
  (   24,    2,     4),    -- Bits are all different.
  (   42,    4,     2),    -- Bits are all different.
  ( 1624,   16,    24),    -- Bits overlap.
  (65504,    0, 65504),    -- Lots of bits (all but the low 6 bits).
  (    0, NULL,  NULL)     -- No bits.
  ;
Führen Sie die Abfrage aus:
SELECT bit1, 
       bit2, 
       BITAND(bit1, bit2), 
       BITOR(bit1, bit2), 
       BITXOR(bit1, BIT2)
  FROM bits
  ORDER BY bit1;
+------+-------+--------------------+-------------------+--------------------+
| BIT1 |  BIT2 | BITAND(BIT1, BIT2) | BITOR(BIT1, BIT2) | BITXOR(BIT1, BIT2) |
|------+-------+--------------------+-------------------+--------------------|
|    0 | 65504 |                  0 |             65504 |              65504 |
|    1 |     1 |                  1 |                 1 |                  0 |
|    2 |     4 |                  0 |                 6 |                  6 |
|    4 |     2 |                  0 |                 6 |                  6 |
|   16 |    24 |                 16 |                24 |                  8 |
| NULL |  NULL |               NULL |              NULL |               NULL |
+------+-------+--------------------+-------------------+--------------------+
Verwendung von BITAND, BITOR und BITXOR mit BINARY-Argumentwerten¶
Erstellen Sie eine einfache Tabelle und fügen Sie die Daten ein:
CREATE OR REPLACE TABLE bits (ID INTEGER, bit1 BINARY(2), bit2 BINARY(2), bit3 BINARY(4));
INSERT INTO bits VALUES
  (1, x'1010', x'0101', x'11001010'),
  (2, x'1100', x'0011', x'01011010'),
  (3, x'BCBC', x'EEFF', x'ABCDABCD'),
  (4, NULL, NULL, NULL);
Bemerkung
Die BINARY-Werte werden in der Notation x'value' eingefügt, wobei value hexadezimale Ziffern enthält. Weitere Informationen dazu finden Sie unter Eingabe und Ausgabe von Binärdaten.
Ausführen einer Abfrage auf BINARY-Spalten gleicher Länge:
SELECT bit1,
       bit2,
       BITAND(bit1, bit2),
       BITOR(bit1, bit2),
       BITXOR(bit1, bit2)
  FROM bits;
+------+------+--------------------+-------------------+--------------------+
| BIT1 | BIT2 | BITAND(BIT1, BIT2) | BITOR(BIT1, BIT2) | BITXOR(BIT1, BIT2) |
|------+------+--------------------+-------------------+--------------------|
| 1010 | 0101 | 0000               | 1111              | 1111               |
| 1100 | 0011 | 0000               | 1111              | 1111               |
| BCBC | EEFF | ACBC               | FEFF              | 5243               |
| NULL | NULL | NULL               | NULL              | NULL               |
+------+------+--------------------+-------------------+--------------------+
Wenn Sie versuchen, eine Abfrage auf BINARY-Spalten mit unterschiedlichen Längen auszuführen, ohne das Argument 'padside' anzugeben, wird ein Fehler zurückgegeben:
SELECT bit1,
       bit3,
       BITAND(bit1, bit3),
       BITOR(bit1, bit3),
       BITXOR(bit1, bit3)
  FROM bits;
100544 (22026): The lengths of two variable-sized fields do not match: first length 2, second length 4
Führen Sie eine Abfrage auf BINARY-Spalten unterschiedlicher Länge aus und füllen Sie den kleineren Argumentwert auf der linken Seite auf:
SELECT bit1,
       bit3,
       BITAND(bit1, bit3, 'LEFT'),
       BITOR(bit1, bit3, 'LEFT'),
       BITXOR(bit1, bit3, 'LEFT')
  FROM bits;
+------+----------+----------------------------+---------------------------+----------------------------+
| BIT1 | BIT3     | BITAND(BIT1, BIT3, 'LEFT') | BITOR(BIT1, BIT3, 'LEFT') | BITXOR(BIT1, BIT3, 'LEFT') |
|------+----------+----------------------------+---------------------------+----------------------------|
| 1010 | 11001010 | 00001010                   | 11001010                  | 11000000                   |
| 1100 | 01011010 | 00001000                   | 01011110                  | 01010110                   |
| BCBC | ABCDABCD | 0000A88C                   | ABCDBFFD                  | ABCD1771                   |
| NULL | NULL     | NULL                       | NULL                      | NULL                       |
+------+----------+----------------------------+---------------------------+----------------------------+
Führen Sie eine Abfrage auf BINARY-Spalten unterschiedlicher Länge aus und füllen Sie den kleineren Argumentwert auf der rechten Seite auf:
SELECT bit1,
       bit3,
       BITAND(bit1, bit3, 'RIGHT'),
       BITOR(bit1, bit3, 'RIGHT'),
       BITXOR(bit1, bit3, 'RIGHT')
  FROM bits;
+------+----------+-----------------------------+----------------------------+-----------------------------+
| BIT1 | BIT3     | BITAND(BIT1, BIT3, 'RIGHT') | BITOR(BIT1, BIT3, 'RIGHT') | BITXOR(BIT1, BIT3, 'RIGHT') |
|------+----------+-----------------------------+----------------------------+-----------------------------|
| 1010 | 11001010 | 10000000                    | 11101010                   | 01101010                    |
| 1100 | 01011010 | 01000000                    | 11011010                   | 10011010                    |
| BCBC | ABCDABCD | A88C0000                    | BFFDABCD                   | 1771ABCD                    |
| NULL | NULL     | NULL                        | NULL                       | NULL                        |
+------+----------+-----------------------------+----------------------------+-----------------------------+