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.
Datentypen
Themen
Jeder Wert, den Amazon Redshift speichert oder abruft, gehört zu einem Datentyp mit einem festen Satz von Eigenschaften. Datentypen werden deklariert, wenn Tabellen erstellt werden. Eine Datentyp beschränkt die Gruppe von Werten, den eine Spalte oder ein Argument enthalten kann.
In der folgenden Tabelle sind alle Datentypen aufgeführt, die Sie in Amazon-Redshift-Tabellen verwenden können.
Datentyp | Aliasnamen | Beschreibung |
---|---|---|
SMALLINT | INT2 | 2-Byte-Ganzzahl mit Vorzeichen |
INTEGER | INT, INT4 | 4-Byte-Ganzzahl mit Vorzeichen |
BIGINT | INT8 | 8-Byte-Ganzzahl mit Vorzeichen |
DECIMAL | NUMERIC | Genauer Zahlenwert mit wählbarer Genauigkeit |
REAL | FLOAT4 | Gleitkommazahl mit einfacher Genauigkeit |
DOUBLE PRECISION | FLOAT8, FLOAT | Gleitkommazahl mit doppelter Genauigkeit |
CHAR | CHARACTER, NCHAR, BPCHAR | Zeichenfolge mit fester Länge |
VARCHAR | CHARACTER VARYING, NVARCHAR, TEXT | Zeichenfolge mit variabler Länge und benutzerdefiniertem Grenzwert |
DATUM | Kalenderdatum (Jahr, Monat, Tag) | |
TIME | TIME WITHOUT TIME ZONE | Uhrzeit |
TIMETZ | TIME WITH TIME ZONE | Uhrzeit mit Zeitzone |
TIMESTAMP (ZEITSTEMPEL) | TIMESTAMP WITHOUT TIME ZONE | Datum und Uhrzeit (ohne Zeitzone) |
TIMESTAMPTZ | TIMESTAMP WITH TIME ZONE | Datum und Uhrzeit (mit Zeitzone) |
INTERVAL YEAR TO MONTH | Zeitdauer in der Reihenfolge von Jahr zu Monat | |
INTERVAL DAY TO SECOND | Zeitdauer in der Reihenfolge von Tag bis zur zweiten | |
BOOLEAN | BOOL | Logischer/Boolescher Wert (wahr/falsch) |
HLLSKETCH | Typ, der für HyperLogLog Skizzen verwendet wird. | |
SUPER | Ein übergeordneter Datentyp, der alle skalaren Typen von Amazon Redshift umfasst, einschließlich komplexer Typen wie ARRAY und STRUCTS. | |
VARBYTE | VARBINARY, BINARY VARYING | Binärwert mit variabler Länge |
GEOMETRY | Geodaten | |
GEOGRAPHY | Geodaten |
Anmerkung
Weitere Informationen über nicht unterstützte Datentypen wie „char“ (dieser Datentyp steht in Anführungszeichen) finden Sie unter Nicht unterstützte PostgreSQL-Datentypen.
Multibyte-Zeichen
Der Datentyp VARCHAR unterstützt Multibyte-UTF-8-Zeichen mit einer Länge von bis zu vier Bytes. Zeichen mit einer Länge von fünf Bytes oder mehr werden nicht unterstützt. Sie berechnen die Größe einer VARCHAR-Spalte, die Multibyte-Zeichen enthält, indem Sie die Anzahl der Zeichen mit der Anzahl der Bytes pro Zeichen multiplizieren. Wenn eine Zeichenfolge z. B. vier chinesischen Zeichen enthält und jedes Zeichen drei Bytes lang ist, dann ist eine VARCHAR(12)-Spalte erforderlich, um die Zeichenfolge zu speichern.
Der Datentyp VARCHAR bietet keine Unterstützung für die folgenden ungültigen UTF-8-Codepunkte:
0xD800 – 0xDFFF
(Bytesequenzen: ED A0 80
–ED BF BF
)
Der Datentyp CHAR bietet keine Unterstützung für Multibyte-Zeichen.
Kompatibilität von Typen und Umwandlung zwischen Typen
Im Folgenden finden Sie eine Erläuterung der Funktionsweise der Regeln zur Umwandlung von Typen und zur Kompatibilität zwischen Datentypen in Amazon Redshift.
Kompatibilität
Es gibt verschiedene Datenbankoperationen, bei denen die Datentypen passend gemacht und den Literalwerten und Konstanten Datentypen zugewiesen werden. Hierzu gehören die folgenden:
-
DML- (Data Manipulation Language-)Operationen über Tabellen
-
UNION-, INTERSECT- und EXCEPT-Abfragen
-
CASE-Ausdrücke
-
Auswertung von Prädikaten wie LIKE oder IN
-
Auswertung von SQL-Funktionen, bei denen Vergleiche durchgeführt oder Daten extrahiert werden
-
Vergleiche mit mathematischen Operatoren
Die Ergebnisse dieser Operationen hängen von den Regeln zur Umwandlung von Typen und der Kompatibilität zwischen Datentypen ab. Kompatibilität bedeutet, dass ein one-to-one Abgleich eines bestimmten Werts und eines bestimmten Datentyps nicht immer erforderlich ist. Da bestimmte Datentypen untereinander kompatibel sind, ist eine implizite Umwandlung (englisch coercion) möglich. Weitere Informationen finden Sie unter Arten von impliziter Umwandlung. Wenn Datentypen inkompatibel sind, können Sie manchmal einen Wert in einen anderen Datentyp umwandeln, indem Sie eine explizite Typumwandlungsfunktion verwenden.
Allgemeine Regeln zur Kompatibilität und zur Umwandlung
Beachten Sie die folgenden Regeln zur Kompatibilität und zur Typumwandlung:
-
Datentypen aus derselben Kategorie sind i. d. R. miteinander kompatibel und können implizit ineinander konvertiert werden. Ein Beispiel hierfür sind numerische Datentypen.
Sie können beispielsweise mit einer impliziten Umwandlung einen Dezimalwert in eine Spalte mit Ganzzahlen einfügen. Dabei werden Dezimalwerte auf eine Ganzzahl gerundet. Sie können auch einen Zahlenwert wie
2008
aus einem Datum extrahieren und den Wert in eine ganzzahlige Spalte einfügen. -
Numerische Datentypen erzwingen Überlaufbedingungen, die auftreten, wenn Sie versuchen, out-of-range Werte einzufügen. Beispielsweise passt ein Dezimalwert mit einer Genauigkeit von 5 Stellen nicht in eine Dezimalspalte mit einer Genauigkeit von 4 Stellen. Eine Ganzzahl bzw. der ganzzahlige Anteil einer Dezimalzahl wird nie abgeschnitten. Hingegen kann können die Nachkommastellen von Dezimalzahlen bei Bedarf auf- oder abgerundet werden. Die Ergebnisse expliziter Umwandlungen von Werten, aus der Tabelle ausgewählt wurden, werden jedoch nicht gerundet.
-
Unterschiedliche Arten von Zeichenfolgen sind miteinander kompatibel. Zeichenfolgen in VARCHAR-Spalten, die Einzelbytedaten enthalten und Zeichenfolgen in CHAR-Spalten können miteinander verglichen und implizit konvertiert werden. VARCHAR-Zeichenfolgen mit Multibytedaten können nicht mit CHAR-Spalten verglichen werden. Sie können eine Zeichenfolge in ein Datum, eine Uhrzeit, einen Zeitstempel oder einen Zahlenwert umwandeln, wenn die Zeichenfolge einen gültigen Literalwert darstellt. Leerzeichen am Anfang und am Ende der Zeichenfolge werden dabei ignoriert. Umgekehrt können Sie auch ein Datum, eine Uhrzeit, einen Zeitstempel oder einen Zahlenwert in eine Zeichenfolge mit fester oder variabler Länge konvertieren.
Anmerkung
Wenn Sie eine Zeichenfolge in einen numerischen Typ umwandeln möchten, muss die Zeichenfolge die Zeichendarstellung einer Zahl sein. Sie können beispielsweise die Zeichenfolgen
'1.0'
und'5.9'
in Dezimalwerte konvertieren,'ABC'
hingegen in keinen numerischen Typ. -
Wenn Sie DECIMAL-Werte mit Zeichenfolgen vergleichen, versucht Amazon Redshift, die Zeichenfolge in einen DECIMAL-Wert umzuwandeln. Wenn Sie alle anderen numerischen Werte mit Zeichenfolgen vergleichen, werden die numerischen Werte in Zeichenfolgen konvertiert. Um eine Konvertierung in der Gegenrichtung zu erreichen (beispielsweise Zeichenfolgen in Ganzzahlen oder DECIMAL-Werte in Zahlenfolgen umzuwandeln), müssen Sie eine explizite Funktion wie beispielsweise CAST verwenden.
-
Wenn Sie einen 64-Bit-Wert vom Typ DECIMAL oder NUMERIC in einen Typ mit einer höheren Genauigkeit umwandeln möchten, müssen Sie eine explizite Funktion verwenden, beispielsweise CAST oder CONVERT.
-
Wenn Sie DATE oder TIMESTAMP in TIMESTAMPTZ konvertieren oder TIME in TIMETZ konvertieren, wird die Zeitzone auf die Zeitzone der aktuellen Sitzung festgelegt. Standardmäßig ist als Zeitzone für Sitzungen UTC festgelegt. Weitere Informationen zum Festlegen der Zeitzone für Sitzungen finden Sie unter Zeitzone.
-
Analog dazu wird auch TIMESTAMPTZ auf der Grundlage der Zeitzone der aktuellen Sitzung in DATE, TIME oder TIMESTAMP konvertiert. Standardmäßig ist als Zeitzone für Sitzungen UTC festgelegt. Die Zeitzoneninformationen werden nach der Konvertierung wieder entfernt.
-
Zeichenfolgen, die einen Zeitstempel mit angegebener Zeitzone darstellen, werden unter Verwendung der Zeitzone der aktuellen Sitzung in TIMESTAMPTZ konvertiert. Diese ist standardmäßig UTC. Zeichenfolgen, die eine Uhrzeit mit angegebener Zeitzone darstellen, werden unter Verwendung der Zeitzone der aktuellen Sitzung in TIMETZ konvertiert. Diese ist standardmäßig UTC.
Arten von impliziter Umwandlung
Es gibt zwei Arten von impliziten Typumwandlungen:
-
Implizite Umwandlung bei der Zuweisung, beispielsweise bei der Zuweisung von Werten in INSERT- oder UPDATE-Befehlen.
-
Implizite Umwandlung in Ausdrücken, beispielsweise bei Vergleichen in der WHERE-Klausel.
In der folgenden Tabelle sind die Datentypen aufgelistet, die eine implizite Konvertierung in Zuweisungen oder Ausdrücken ermöglichen. Sie können diese Konvertierungen auch mit expliziten Umwandlungsfunktionen durchführen.
Von Typ | Zu Typ |
---|---|
BIGINT (INT8) | BOOLEAN |
CHAR | |
DECIMAL (NUMERIC) | |
DOUBLE PRECISION (FLOAT8) | |
INTEGER (INT, INT4) | |
REAL (FLOAT4) | |
SMALLINT (INT2) | |
VARCHAR | |
CHAR | VARCHAR |
DATUM | CHAR |
VARCHAR | |
TIMESTAMP | |
TIMESTAMPTZ | |
DECIMAL (NUMERIC) | BIGINT (INT8) |
CHAR | |
DOUBLE PRECISION (FLOAT8) | |
INTEGER (INT, INT4) | |
REAL (FLOAT4) | |
SMALLINT (INT2) | |
VARCHAR | |
DOUBLE PRECISION (FLOAT8) | BIGINT (INT8) |
CHAR | |
DECIMAL (NUMERIC) | |
INTEGER (INT, INT4) | |
REAL (FLOAT4) | |
SMALLINT (INT2) | |
VARCHAR | |
INTEGER (INT, INT4) | BIGINT (INT8) |
BOOLEAN | |
CHAR | |
DECIMAL (NUMERIC) | |
DOUBLE PRECISION (FLOAT8) | |
REAL (FLOAT4) | |
SMALLINT (INT2) | |
VARCHAR | |
REAL (FLOAT4) | BIGINT (INT8) |
CHAR | |
DECIMAL (NUMERIC) | |
INTEGER (INT, INT4) | |
SMALLINT (INT2) | |
VARCHAR | |
SMALLINT (INT2) | BIGINT (INT8) |
BOOLEAN | |
CHAR | |
DECIMAL (NUMERIC) | |
DOUBLE PRECISION (FLOAT8) | |
INTEGER (INT, INT4) | |
REAL (FLOAT4) | |
VARCHAR | |
TIMESTAMP | CHAR |
DATUM | |
VARCHAR | |
TIMESTAMPTZ | |
TIME | |
TIMESTAMPTZ | CHAR |
DATUM | |
VARCHAR | |
TIMESTAMP | |
TIMETZ | |
TIME | VARCHAR |
TIMETZ | |
INTERVAL DAY TO SECOND | |
TIMETZ | VARCHAR |
TIME | |
GEOMETRY | GEOGRAPHY |
GEOGRAPHY | GEOMETRY |
Anmerkung
Bei impliziten Typumwandlungen zwischen TIMESTAMPTZ, TIMESTAMP, DATE, TIME, TIMETZ oder Zeichenfolgen wird die Zeitzone der aktuellen Sitzung verwendet. Weitere Informationen zum Festlegen der aktuellen Zeitzone finden Sie unter Zeitzone.
Die Datentypen GEOMETRY und GEOGRAPHY können nicht implizit in einen anderen Datentyp umgewandelt werden (außer untereinander). Weitere Informationen finden Sie unter CAST-Funktion.
Der Datentyp VARBYTE kann nicht implizit in einen anderen Datentyp umgewandelt werden. Weitere Informationen finden Sie unter CAST-Funktion.
Verwenden der dynamischen Typisierung für den SUPER-Datentyp
Amazon Redshift verwendet die dynamische Typisierung, um schemalose SUPER-Daten zu verarbeiten, ohne dass die Datentypen deklariert werden müssen, bevor Sie sie in Ihrer Abfrage verwenden. Bei der dynamischen Typisierung werden die Ergebnisse der Navigation in SUPER-Datenspalten verwendet, ohne sie explizit in Amazon-Redshift-Typen umwandeln zu müssen. Weitere Informationen zur Verwendung der dynamischen Typisierung für SUPER Datentypen finden Sie unter Dynamische Typisierung.
Sie können SUPER-Werte in andere Datentypen umwandeln und umgekehrt, mit einigen Ausnahmen. Weitere Informationen finden Sie unter Einschränkungen.