Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
CASTFunktion
Die CAST Funktion konvertiert einen Datentyp in einen anderen kompatiblen Datentyp. Sie können beispielsweise eine Zeichenfolge in ein Datum oder einen numerischen Typ in eine Zeichenfolge konvertieren. CASTführt eine Laufzeitkonvertierung durch, was bedeutet, dass die Konvertierung den Datentyp eines Werts in einer Quelltabelle nicht ändert. Dieser wird nur im Kontext der Abfrage geändert.
Die CAST Funktion ist insofern sehr ähnlich wieCONVERTFunktion, dass beide einen Datentyp in einen anderen konvertieren, aber sie werden unterschiedlich aufgerufen.
Bestimmte Datentypen erfordern eine explizite Konvertierung in andere Datentypen mithilfe der CONVERT Funktion CAST oder. Andere Datentypen können implizit, als Teil eines anderen Befehls, ohne die Verwendung von CAST oder CONVERT konvertiert werden. Siehe Kompatibilität von Typen und Umwandlung zwischen Typen.
Syntax
Verwenden Sie eine dieser beiden gleichwertigen Syntaxformate, um Ausdrücke von einem Datentyp in einen anderen umzuwandeln.
CAST ( expression AS type ) expression :: type
Argumente
- expression
-
Ein Ausdruck, der einen oder mehrere Werte auswertet, beispielsweise ein Spaltenname oder ein Literal. Die Konvertierung von Null-Werten gibt Null-Werte zurück. Der Ausdruck darf keine leeren Zeichenfolgen enthalten.
- Typ
-
Einer der unterstützten Datentypen.
Rückgabetyp
CASTgibt den durch das Typargument angegebenen Datentyp zurück.
Anmerkung
Amazon Redshift gibt einen Fehler zurück, wenn Sie versuchen, eine problematische Konvertierung durchzuführen, z. B. eine DECIMAL Konvertierung, die an Genauigkeit verliert, wie die folgende:
select 123.456::decimal(2,1);
oder eine INTEGER Konvertierung, die einen Überlauf verursacht:
select 12345678::smallint;
Beispiele
Einige der Beispiele verwenden die TICKITBeispieldatenbank. Weitere Informationen zum Einrichten von Beispieldaten finden Sie unter Daten laden.
Die folgenden beiden Abfragen sind gleichwertig. Beide wandeln einen Dezimalwert in eine Ganzzahl um:
select cast(pricepaid as integer) from sales where salesid=100;
pricepaid ----------- 162 (1 row)
select pricepaid::integer from sales where salesid=100;
pricepaid ----------- 162 (1 row)
Das Folgende führt zu einem ähnlichen Ergebnis. Für die Ausführung sind keine Beispieldaten erforderlich:
select cast(162.00 as integer) as pricepaid;
pricepaid ----------- 162 (1 row)
In diesem Beispiel werden die Werte in einer Zeitstempelspalte in Datumsangaben umgewandelt, was dazu führt, dass die Uhrzeit aus jedem Ergebnis entfernt wird:
select cast(saletime as date), salesid from sales order by salesid limit 10;
saletime | salesid -----------+--------- 2008-02-18 | 1 2008-06-06 | 2 2008-06-06 | 3 2008-06-09 | 4 2008-08-31 | 5 2008-07-16 | 6 2008-06-26 | 7 2008-07-10 | 8 2008-07-22 | 9 2008-08-06 | 10 (10 rows)
Wenn Sie die Daten nicht CAST wie im vorherigen Beispiel dargestellt verwenden würden, würden die Ergebnisse die Uhrzeit beinhalten: 2008-02-18 02:36:48.
Die folgende Abfrage wandelt variable Zeichendaten in ein Datum um. Für die Ausführung sind keine Beispieldaten erforderlich.
select cast('2008-02-18 02:36:48' as date) as mysaletime;
mysaletime -------------------- 2008-02-18 (1 row)
In diesem Beispiel werden die Werte in einer Datumsspalte in Zeitstempel umgewandelt:
select cast(caldate as timestamp), dateid from date order by dateid limit 10;
caldate | dateid --------------------+-------- 2008-01-01 00:00:00 | 1827 2008-01-02 00:00:00 | 1828 2008-01-03 00:00:00 | 1829 2008-01-04 00:00:00 | 1830 2008-01-05 00:00:00 | 1831 2008-01-06 00:00:00 | 1832 2008-01-07 00:00:00 | 1833 2008-01-08 00:00:00 | 1834 2008-01-09 00:00:00 | 1835 2008-01-10 00:00:00 | 1836 (10 rows)
In diesem Beispiel wird eine Ganzzahl in eine Zeichenfolge umgewandelt:
select cast(2008 as char(4));
bpchar -------- 2008
In diesem Beispiel wird ein DECIMAL (6,3) -Wert in einen DECIMAL (4,1) -Wert umgewandelt:
select cast(109.652 as decimal(4,1));
numeric --------- 109.7
Dieses Beispiel zeigt einen komplexeren Ausdruck. Die PRICEPAID Spalte (eine DECIMAL (8,2) -Spalte) in der SALES Tabelle wird in eine DECIMAL (38,2) -Spalte umgewandelt und die Werte werden mit 100000000000000000000 multipliziert:
select salesid, pricepaid::decimal(38,2)*100000000000000000000 as value from sales where salesid<10 order by salesid;
salesid | value ---------+---------------------------- 1 | 72800000000000000000000.00 2 | 7600000000000000000000.00 3 | 35000000000000000000000.00 4 | 17500000000000000000000.00 5 | 15400000000000000000000.00 6 | 39400000000000000000000.00 7 | 78800000000000000000000.00 8 | 19700000000000000000000.00 9 | 59100000000000000000000.00 (9 rows)
Anmerkung
Sie können keine CAST CONVERT OR-Operation für den Datentyp ausführen, um ihn in einen anderen GEOMETRY
Datentyp zu ändern. Sie können jedoch eine hexadezimale Darstellung eines Zeichenkettenliterals im erweiterten bekannten Binärformat (EWKB) als Eingabe für Funktionen bereitstellen, die ein Argument akzeptieren. GEOMETRY
Beispielsweise erwartet die folgende ST_AsText
-Funktion den Datentyp GEOMETRY
.
SELECT ST_AsText('01010000000000000000001C400000000000002040');
st_astext ------------ POINT(7 8)
Sie können außerdem explizit den Datentyp GEOMETRY
angeben.
SELECT ST_AsText('010100000000000000000014400000000000001840'::geometry);
st_astext ------------ POINT(5 6)