- Kategorien:
BITSHIFTLEFT¶
Verschiebt die Bits für einen numerischen oder binären Ausdruck n
Positionen nach links.
- Aliasse:
BIT_SHIFTLEFT
- Siehe auch:
Syntax¶
BITSHIFTLEFT( <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 eines beliebigen Arguments numerisch aber nicht INTEGER ist (z. B. FLOAT, DECIMAL usw.), dann wird dieses Argument in einen INTEGER-Wert umgewandelt.
Wenn der Datentyp eines beliebigen Arguments eine Zeichenfolge ist (z. B. VARCHAR), dann wird das Argument, wenn möglich, in einen INTEGER-Wert umgewandelt. 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.Wenn ein vorzeichenbehafteter INTEGER-Wert zurückgegeben wird und sich der Wert des höchstwertigen Bits ändert (von 0 auf 1 oder von 1 auf 0), wird das Vorzeichen des Ergebnisses umgekehrt. Zum Beispiel gibt
BITSHIFTLEFT(1, 127)
eine negative Zahl zurück.Wenn ein vorzeichenbehafteter INTEGER-Wert zurückgegeben wird, werden Bits, die über das Ende des 128-Bit-Ausgabewerts hinaus verschoben werden, gelöscht.
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 BITSHIFTLEFT 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,
BITSHIFTLEFT(bit1, 1),
BITSHIFTLEFT(bit3, 1),
BITSHIFTLEFT(bit1, 8),
BITSHIFTLEFT(bit3, 16)
FROM bits;
+------+----------+-----------------------+-----------------------+-----------------------+------------------------+
| BIT1 | BIT3 | BITSHIFTLEFT(BIT1, 1) | BITSHIFTLEFT(BIT3, 1) | BITSHIFTLEFT(BIT1, 8) | BITSHIFTLEFT(BIT3, 16) |
|------+----------+-----------------------+-----------------------+-----------------------+------------------------|
| 1010 | 11001010 | 2020 | 22002020 | 1000 | 10100000 |
| 1100 | 01011010 | 2200 | 02022020 | 0000 | 10100000 |
| BCBC | ABCDABCD | 7978 | 579B579A | BC00 | ABCD0000 |
| NULL | NULL | NULL | NULL | NULL | NULL |
+------+----------+-----------------------+-----------------------+-----------------------+------------------------+