Kategorien:

Bitweise Ausdrucksfunktionen

BITSHIFTRIGHT

Verschiebt die Bits für einen numerischen oder binären Ausdruck n Positionen nach rechts.

Aliasse:

BIT_SHIFTRIGHT

Siehe auch:

BITSHIFTLEFT

Syntax

BITSHIFTRIGHT( <expr1> , <n> )
Copy

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.

n

Die Anzahl der Bits, um die verschoben werden soll.

Rückgabewerte

Gibt einen INTEGER-Wert, einen BINARY-Wert oder einen NULL-Wert zurück:

  • Wenn der Eingabeausdruck einen INTEGER-Wert enthält, gibt er eine vorzeichenbehaftete Ganzzahl von 128 Bit (16 Byte) zurück, unabhängig von Größe oder Datentyp des Eingabedatenwerts.

  • Wenn der Eingabeausdruck einen BINARY-Wert enthält, wird ein BINARY-Wert zurückgegeben.

  • Wenn eines der Argumente NULL ist, wird NULL zurückgegeben.

Nutzungshinweise

  • Wenn der Datentyp des Arguments numerisch aber nicht INTEGER ist (z. B. FLOAT, DECIMAL usw.), dann wird das Argument in einen INTEGER-Wert umgewandelt.

  • Wenn der Datentyp des Arguments eine Zeichenfolge ist (z. B. VARCHAR), dann wird das Argument in einen INTEGER-Wert umgewandelt, wenn dies möglich ist. So wird beispielsweise die Zeichenfolge 12.3 in 12 umgewandelt. 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.

Verwenden von BITSHIFTLEFT und BITSHIFTRIGHT mit INTEGER-Argumenten

Erstellen Sie eine einfache Tabelle und Daten:

CREATE OR REPLACE TABLE bits (ID INTEGER, bit1 INTEGER, bit2 INTEGER);
Copy
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.
  ;
Copy

Führen Sie die Abfrage aus:

SELECT bit1, 
       bit2, 
       BITSHIFTLEFT(bit1, 1), 
       BITSHIFTRIGHT(bit2, 1)
  FROM bits
  ORDER BY bit1;
Copy
+------+-------+-----------------------+------------------------+
| BIT1 |  BIT2 | BITSHIFTLEFT(BIT1, 1) | BITSHIFTRIGHT(BIT2, 1) |
|------+-------+-----------------------+------------------------|
|    0 | 65504 |                     0 |                  32752 |
|    1 |     1 |                     2 |                      0 |
|    2 |     4 |                     4 |                      2 |
|    4 |     2 |                     8 |                      1 |
|   16 |    24 |                    32 |                     12 |
| NULL |  NULL |                  NULL |                   NULL |
+------+-------+-----------------------+------------------------+

Verwenden von BITSHIFTRIGHT 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);
Copy

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.

Führen Sie die Abfrage aus:

SELECT bit1,
       bit3,
       BITSHIFTRIGHT(bit1, 1),
       BITSHIFTRIGHT(bit3, 1),
       BITSHIFTRIGHT(bit1, 8),
       BITSHIFTRIGHT(bit3, 16)
  FROM bits;
Copy
+------+----------+------------------------+------------------------+------------------------+-------------------------+
| BIT1 | BIT3     | BITSHIFTRIGHT(BIT1, 1) | BITSHIFTRIGHT(BIT3, 1) | BITSHIFTRIGHT(BIT1, 8) | BITSHIFTRIGHT(BIT3, 16) |
|------+----------+------------------------+------------------------+------------------------+-------------------------|
| 1010 | 11001010 | 0808                   | 08800808               | 0010                   | 00001100                |
| 1100 | 01011010 | 0880                   | 00808808               | 0011                   | 00000101                |
| BCBC | ABCDABCD | 5E5E                   | 55E6D5E6               | 00BC                   | 0000ABCD                |
| NULL | NULL     | NULL                   | NULL                   | NULL                   | NULL                    |
+------+----------+------------------------+------------------------+------------------------+-------------------------+