- Kategorien:
BITSHIFTRIGHT¶
Verschiebt die Bits für einen numerischen oder binären Ausdruck n
Positionen nach rechts.
- Aliasse:
BIT_SHIFTRIGHT
- Siehe auch:
Syntax¶
BITSHIFTRIGHT( <expr1> , <n> )
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
in12
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);
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,
BITSHIFTLEFT(bit1, 1),
BITSHIFTRIGHT(bit2, 1)
FROM bits
ORDER BY bit1;
+------+-------+-----------------------+------------------------+
| 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);
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;
+------+----------+------------------------+------------------------+------------------------+-------------------------+
| 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 |
+------+----------+------------------------+------------------------+------------------------+-------------------------+