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.
Kompatibilität von Typen und Umwandlung zwischen Typen
In der folgenden Diskussion wird beschrieben, wie Typkonvertierungsregeln und Datentypkompatibilität in AWS Clean Rooms funktionieren.
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 einige Datentypen kompatibel sind, ist eine implizite Konvertierung oder ein Zwang 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, Werte einzufügen. out-of-range Beispielsweise passt ein Dezimalwert mit einer Genauigkeit von 5 Stellen nicht in eine Dezimalspalte mit einer Genauigkeit von 4 Stellen. Eine Ganzzahl oder der gesamte Teil einer Dezimalzahl wird niemals gekürzt. Der Bruchteil einer Dezimalzahl kann jedoch je nach Bedarf auf- oder abgerundet werden. Die Ergebnisse expliziter Umwandlungen von Werten, aus der Tabelle ausgewählt wurden, werden jedoch nicht gerundet.
-
Verschiedene Arten von Zeichenketten sind kompatibel. VARCHAR-Spaltenzeichenfolgen, die Einzelbyte-Daten enthalten, und CHAR-Spaltenzeichenfolgen sind vergleichbar und implizit konvertierbar. VARCHAR-Zeichenfolgen mit Multibytedaten können nicht mit CHAR-Spalten verglichen werden. Sie können eine Zeichenfolge auch in einen Datums-, Zeit-, Zeitstempel- oder numerischen Wert konvertieren, wenn es sich bei der Zeichenfolge um einen geeigneten Literalwert handelt. Alle führenden oder nachfolgenden Leerzeichen werden 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 die Zeichenketten
'1.0'
beispielsweise in Dezimalwerte'5.9'
umwandeln, aber Sie können die Zeichenfolge'ABC'
nicht in einen beliebigen numerischen Typ umwandeln. -
Wenn Sie DEZIMAL-Werte mit Zeichenketten vergleichen, AWS Clean Rooms versucht es, die Zeichenfolge in einen DEZIMALWERT zu konvertieren. 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-Funktion 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.
-
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 Konvertierungen bei Aufgaben, z. B. beim Einstellen von Werten in den Befehlen INSERT oder UPDATE
-
Implizite Konvertierungen in Ausdrücken, wie z. B. das Durchführen von Vergleichen in der WHERE-Klausel
In der folgenden Tabelle sind die Datentypen aufgeführt, die implizit in Zuweisungen oder Ausdrücken konvertiert werden können. Sie können diese Konvertierungen auch mit expliziten Umwandlungsfunktionen durchführen.
Von Typ | Zu Typ |
---|---|
BIGINT | BOOLEAN |
CHAR | |
DECIMAL (NUMERIC) | |
DOUBLE PRECISION (FLOAT8) | |
INTEGER | |
REAL (FLOAT4) | |
SMALLINT | |
VARCHAR | |
CHAR | VARCHAR |
DATUM | CHAR |
VARCHAR | |
TIMESTAMP | |
TIMESTAMPTZ | |
DECIMAL (NUMERIC) | BIGINT |
CHAR | |
DOUBLE PRECISION (FLOAT8) | |
GANZZAHL (INT) | |
REAL (FLOAT4) | |
SMALLINT | |
VARCHAR | |
DOUBLE PRECISION (FLOAT8) | BIGINT |
CHAR | |
DECIMAL (NUMERIC) | |
GANZZAHL (INT) | |
REAL (FLOAT4) | |
SMALLINT | |
VARCHAR | |
GANZZAHL (INT) | BIGINT |
BOOLEAN | |
CHAR | |
DECIMAL (NUMERIC) | |
DOUBLE PRECISION (FLOAT8) | |
REAL (FLOAT4) | |
SMALLINT | |
VARCHAR | |
REAL (FLOAT4) | BIGINT |
CHAR | |
DECIMAL (NUMERIC) | |
GANZZAHL (INT) | |
SMALLINT | |
VARCHAR | |
SMALLINT | BIGINT |
BOOLEAN | |
CHAR | |
DECIMAL (NUMERIC) | |
DOUBLE PRECISION (FLOAT8) | |
GANZZAHL (INT) | |
REAL (FLOAT4) | |
VARCHAR | |
TIMESTAMP | CHAR |
DATUM | |
VARCHAR | |
TIMESTAMPTZ | |
TIME | |
TIMESTAMPTZ | CHAR |
DATUM | |
VARCHAR | |
TIMESTAMP | |
TIMETZ | |
TIME | VARCHAR |
TIMETZ | |
TIMETZ | VARCHAR |
TIME |
Anmerkung
Bei impliziten Typumwandlungen zwischen TIMESTAMPTZ, TIMESTAMP, DATE, TIME, TIMETZ oder Zeichenfolgen wird die Zeitzone der aktuellen Sitzung verwendet.
Der Datentyp VARBYTE kann nicht implizit in einen anderen Datentyp umgewandelt werden. Weitere Informationen finden Sie unter CAST-Funktion.