CAST-Funktion - Amazon Redshift

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.

CAST-Funktion

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. CAST fü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 CONVERT-Funktion insofern sehr ähnlich, als beide Funktionen einen Datentyp in einen anderen konvertieren. Die beiden Funktionen werden jedoch unterschiedlich aufgerufen.

Bestimmte Datentypen erfordern eine explizite Konvertierung in andere Datentypen unter Verwendung der Funktionen CAST oder CONVERT. Andere Datentypen können implizit als Teil eines anderen Befehls konvertiert werden, ohne CAST oder CONVERT zu verwenden. 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

CAST gibt den Datentyp zurück, der durch das Argument type angegeben ist.

Anmerkung

Amazon Redshift gibt einen Fehler zurück, wenn Sie versuchen, eine problematische Konvertierung durchzuführen, beispielsweise die folgende DECIMAL-Konvertierung, die Präzision verliert:

select 123.456::decimal(2,1);

oder eine INTEGER-Konvertierung, die einen Overflow verursacht:

select 12345678::smallint;

Beispiele

Einige der Beispiele verwenden die Beispieldatenbank TICKIT. 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 CAST nicht wie im vorherigen Beispiel dargestellt verwendet haben, würden die Ergebnisse die Uhrzeit umfassen: 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 einem Fall wie im vorherigen Beispiel können Sie mithilfe von TO_CHAR zusätzliche Kontrolle über die Ausgabeformatierung erhalten.

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 Spalte PRICEPAID (eine DECIMAL(8,2)-Spalte) in der Tabelle SALES 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- oder CONVERT-Operation für den GEOMETRY-Datentyp durchführen, um ihn in einen anderen Datentyp zu ändern. Sie können jedoch eine hexadezimale Darstellung eines String-Literals im EWKB-Format (Extended Well-Known Binary) als Parameter für Funktionen bereitstellen, die ein GEOMETRY-Argument akzeptieren. 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)