Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Gilt für:
Databricks SQL
Databricks Runtime
Wandelt den Wert expr in den Zieldatentyp type um. Dieser Operator ist ein Synonym für :: den Operator (Doppelpunktzeichen)
Syntax
cast(sourceExpr AS targetType)
Argumente
-
sourceExpr: Ein beliebiger umwandlungsfähiger Ausdruck. -
targetType: Der Datentyp des Ergebnisses.
Gibt zurück
Das Ergebnis ist vom Typ targetType.
Die folgenden Kombinationen der Datentypumwandlung sind gültig:
| Quelle (Zeile) Ziel(Spalte) | LEERE | numerisch | SCHNUR | DATUM | ZEITSTEMPEL | TIMESTAMP_NTZ | Jahresmonatsintervall | Tageszeitintervall | BOOLESCHEN | BINÄR | Array | LANDKARTE | STRUKTUR | VARIANTE | OBJECT- |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| LEERE | J | J | J | J | J | J | J | J | J | J | J | J | J | J | N |
| numerisch | N | J | J | N | J | N | J | J | J | N | N | N | N | J | N |
| SCHNUR | N | J | J | J | J | J | J | J | J | J | N | N | N | J | N |
| DATUM | N | N | J | J | J | J | N | N | N | N | N | N | N | J | N |
| ZEITSTEMPEL | N | J | J | J | J | J | N | N | N | N | N | N | N | J | N |
| TIMESTAMP_NTZ | N | N | J | J | J | J | N | N | N | N | N | N | N | J | N |
| Jahresmonatsintervall | N | J | J | N | N | N | J | N | N | N | N | N | N | N | N |
| Tageszeitintervall | N | J | J | N | N | N | N | J | N | N | N | N | N | N | N |
| BOOLESCHEN | N | J | J | N | J | N | N | N | J | N | N | N | N | J | N |
| BINÄR | N | J | J | N | N | N | N | N | N | J | N | N | N | J | N |
| Array | N | N | J | N | N | N | N | N | N | N | J | N | N | J | N |
| LANDKARTE | N | N | J | N | N | N | N | N | N | N | N | J | N | N | N |
| STRUKTUR | N | N | J | N | N | N | N | N | N | N | N | N | J | N | N |
| VARIANTE | N | J | J | J | J | J | N | N | J | J | J | J | J | J | N |
| OBJECT- | N | N | N | N | N | N | N | N | N | N | N | J | J | N | N |
Regeln und Einschränkungen basierend auf TargetType
Warnung
Wenn spark.sql.ansi.enabled in Databricks Runtime auf false festgelegt ist, verursacht ein Überlauf keinen Fehler, sondern „umschließt“ das Ergebnis stattdessen.
Ein sourceExpr Wert mit einem ungültigen Format oder ungültigen Zeichen targetType führt zu einem NULL.
Numerisch
Wenn dies targetType ein numerischer Wert ist und sourceExpr vom Typ ist:
-
Das Ergebnis ist ein
NULL-Wert des angegebenen numerischen Typs. -
Wenn es sich bei
targetTypeum einen integralen numerischen Datentyp handelt, ist das ErgebnissourceExpr, auf eine ganze Zahl abgeschnitten.Andernfalls ist das Ergebnis
sourceExpr, auf eine verfügbare Skalierung vontargetType.Wenn der Wert außerhalb des Bereichs von
targetTypeliegt, wird ein Überlauffehler ausgelöst.Verwenden Sie try_cast, um Überlauffehler in
NULL. -
sourceExprwird als Literalwert des WertstargetTypedes Werts gelesen.Wenn
sourceExprdas Format für Literalwerte nicht erfüllt, wird ein Fehler ausgelöst.Wenn der Wert außerhalb des Bereichs von
targetTypeliegt, wird ein Überlauffehler ausgelöst.Verwenden Sie try_cast, um Überlauf- und ungültige Formatfehler in
NULL. -
Das Ergebnis ist die Anzahl der Sekunden, die zwischen
1970-01-01 00:00:00 UTCundsourceExpr.Wenn
targetTypees sich um eine integrale Zahl handelt, wird das Ergebnis auf eine ganze Zahl abgeschnitten.Andernfalls wird das Ergebnis auf eine verfügbare Skalierung gerundet
targetType.Wenn das Ergebnis außerhalb des Bereichs
targetTypeliegt, wird ein Überlauffehler ausgelöst.Verwenden Sie try_cast, um Überlauffehler in
NULL. -
Gilt für:
Databricks SQL
Databricks Runtime 11.3 LTS und höherZieltyp muss ein exakter numerischer Wert sein.
Bei einem
INTERVAL upper_unit TO lower_unitwird das Ergebnis als Gesamtzahl vonlower_unitgemessen. Wennlower_unitder WertSECONDist, werden Sekundenbruchteile rechts vom Dezimalpunkt gespeichert. Für alle anderen Intervalle ist das Ergebnis immer eine integrale Zahl. -
Wenn
sourceExprgleich:-
true: Das Ergebnis ist 1. -
false: Das Ergebnis ist 0. -
NULL: Das Ergebnis istNULL.
-
-
Es gelten die Regeln des Typs des tatsächlichen Werts des
VARIANT-Typs.
Beispiele
> SELECT cast(NULL AS INT);
NULL
> SELECT cast(5.6 AS INT);
5
> SELECT cast(5.6 AS DECIMAL(2, 0));
6
> SELECT cast(-5.6 AS INT);
-5
> SELECT cast(-5.6 AS DECIMAL(2, 0));
-6
> SELECT cast(128 AS TINYINT);
Overflow
> SELECT cast(128 AS DECIMAL(2, 0));
Overflow
> SELECT cast('123' AS INT);
123
> SELECT cast('123.0' AS INT);
Invalid format
> SELECT cast(TIMESTAMP'1970-01-01 00:00:01' AS LONG);
1
> SELECT cast(TIMESTAMP'1970-01-01 00:00:00.000001' AS DOUBLE);
1.0E-6
> SELECT cast(TIMESTAMP'2022-02-01 00:00:00' AS SMALLINT);
error: overflow
> SELECT cast(true AS BOOLEAN);
1
> SELECT cast(INTERVAL '1-2' YEAR TO MONTH AS INTEGER);
14
> SELECT cast(INTERVAL '1:30.5' MINUTE TO SECOND AS DECIMAL(5, 2));
90.50
> SELECT cast(TRUE AS INT);
1
> SELECT cast(FALSE AS INT);
0
> SELECT cast('15'::VARIANT AS INT);
15
SCHNUR
Wenn das sourceExpr ein STRING ist, erbt das resultierende STRING die Sortierung von sourceExpr.
In allen anderen Fällen ist die Sortierung des Resultierenden STRING die Standardsortierung.
Um die Sortierung zu ändern, fügen Sie den Collationsausdruck hinzu.
Wenn es sich um targetType einen STRING Typ handelt und sourceExpr vom Typ ist:
-
Das Ergebnis ist eine
NULL-Zeichenfolge. -
Das Ergebnis ist die Literalnummer mit einem optionalen Minuszeichen und keine führenden Nullen, außer für die einzelne Zahl links des Dezimalpunkts. Wenn dies
targetTypeDECIMAL(p, s)mitsgrößerem 0 ist, wird ein Dezimalpunkt hinzugefügt und nachgestellte Nullen werden zur Skalierung hinzugefügt. -
Ist die absolute Zahl kleiner
10,000,000und größer oder gleich als0.001, wird das Ergebnis ohne wissenschaftliche Notation mit mindestens einer Zahl auf einer Seite des Dezimalpunkts ausgedrückt.Andernfalls verwendet Azure Databricks eine Mantisse, gefolgt von
Eund einem Exponenten. Die Mantissa verfügt über ein optionales Führendes Minuszeichen gefolgt von einer Ziffer links neben dem Dezimalpunkt und der minimalen Anzahl von Ziffern, die größer als null sind, rechts. Der Exponent hat und optional ein führendes Minuszeichen. -
Wenn das Jahr zwischen 9999 BCE und 9999 CE liegt, ist das Ergebnis eine DatumsZeichenfolge des Formulars
-YYYY-MM-DDundYYYY-MM-DDjeweils.Seit Jahren vor oder nach diesem Bereich werden die erforderliche Anzahl von Ziffern zur Jahreskomponente hinzugefügt und
+für CE verwendet. -
Wenn das Jahr zwischen 9999 BCE und 9999 CE liegt, ist das Ergebnis eine ZeitstempelZeichenfolge des Formulars
-YYYY-MM-DD hh:mm:ssundYYYY-MM-DD hh:mm:ssjeweils.Seit Jahren vor oder nach diesem Bereich werden die erforderliche Anzahl von Ziffern zur Jahreskomponente hinzugefügt und
+für CE verwendet.Bruchsekunden
.f...werden bei Bedarf hinzugefügt. -
Wenn das Jahr zwischen 9999 BCE und 9999 CE liegt, ist das Ergebnis eine ZeitstempelZeichenfolge des Formulars
-YYYY-MM-DD hh:mm:ssundYYYY-MM-DD hh:mm:ssjeweils.Seit Jahren vor oder nach diesem Bereich werden die erforderliche Anzahl von Ziffern zur Jahreskomponente hinzugefügt und
+für CE verwendet.Bruchsekunden
.f...werden bei Bedarf hinzugefügt. -
Das Ergebnis ist die kürzeste Darstellung des Intervalls Literal. Wenn das Intervall negativ ist, wird das Zeichen in die
interval-stringDatei eingebettet. Für Einheiten, die kleiner als 10,führende Nullen sind, werden ausgelassen.Eine typische Intervallzeichenfolge des Jahresmonats weist das Formular auf:
INTERVAL 'Y' YEARINTERVAL 'Y-M' YEAR TO MONTHINTERVAL 'M' MONTH
-
Das Ergebnis ist die kürzeste Darstellung des Intervalls Literal. Wenn das Intervall negativ ist, wird das Zeichen in die
interval-stringDatei eingebettet. Bei Einheiten, die kleiner als 10 sind, werden führende Nullen ausgelassen.Eine typische Tageszeitintervallzeichenfolge weist das Formular auf:
INTERVAL 'D' DAYINTERVAL 'D h' DAY TO HOURINTERVAL 'D h:m' DAY TO MINUTEINTERVAL 'D h:m:s' DAY TO SECONDINTERVAL 'h' HOURINTERVAL 'h:m' HOUR TO MINUTEINTERVAL 'm:s' MINUTE TO SECONDINTERVAL 's' SECOND
-
Das Ergebnis des booleschen Ausdrucks
trueist derSTRING-Literaltrue. Fürfalseist es das STRING-Literalfalse. FürNULList es die NULL-Zeichenfolge. -
Ein Ergebnis ist die Binärdatei
sourceExpr, die als UTF-8-Zeichensequenz interpretiert wird.Azure Databricks überprüft nicht die UTF-8-Zeichen. Ein Cast von
BINARYzuSTRINGwird nie Ersatzzeichen einfügen oder einen Fehler auslösen. -
Das Ergebnis ist eine durch Komma getrennte Liste von Castelementen, die mit quadratischen Klammern
[ ]geklammert ist. Ein Leerzeichen folgt jedem Komma. EinNULLElement wird in ein Literalnullübersetzt.Azure Databricks setzt keine Anführungszeichen und markiert einzelne Elemente nicht, die selbst Klammern oder Kommas enthalten können.
-
Das Ergebnis ist eine durch Komma getrennte Liste von Castschlüsselwertpaaren, die mit geschweiften
{ }Klammern geklammert ist. Ein Leerzeichen folgt jedem Komma. Die einzelnen Schlüssel/Wert-Paare sind durch ein->voneinander getrennt. EinNULLKartenwert wird in Literalnullübersetzt.Azure Databricks setzt weder Anführungszeichen noch anderweitige Markierungen für einzelne Schlüssel oder Werte, die möglicherweise selbst geschweifte Klammern, Kommas oder
->enthalten können. -
Das Ergebnis ist eine durch Komma getrennte Liste von Castfeldwerten, die mit geschweiften Klammern
{ }geklammert ist. Ein Leerzeichen folgt jedem Komma. EinNULLFeldwert wird in einen Literalnullübersetzt.Azure Databricks fasst einzelne Feldwerte, die möglicherweise selbst geschweifte Klammern oder Kommas enthalten können, nicht in Anführungszeichen.
-
Es gelten die Regeln des Typs des tatsächlichen Werts des
VARIANT-Typs.
Beispiele
> SELECT cast(NULL AS STRING);
NULL
> SELECT cast(-3Y AS STRING);
-3
> SELECT cast(5::DECIMAL(10, 5) AS STRING);
5.00000
> SELECT cast(12345678e-4 AS STRING);
1234.5678
> SELECT cast(1e7 as string);
1.0E7
> SELECT cast(1e6 as string);
1000000.0
> SELECT cast(1e-4 as string);
1.0E-4
> SELECT cast(1e-3 as string);
0.001
> SELECT cast(12345678e7 AS STRING);
1.2345678E14
> SELECT cast(DATE'1900-12-31' AS STRING);
1900-12-31
-- Caesar no more
> SELECT cast(DATE'-0044-03-15' AS STRING);
-0044-03-15
> SELECT cast(DATE'100000-12-31' AS STRING);
+100000-12-31
> SELECT cast(current_timestamp() AS STRING);
2022-04-02 22:29:09.783
> SELECT cast(TIMESTAMP_NTZ'2023-01-01' AS STRING);
2023-01-01 00:00:00
> SELECT cast(INTERVAL -'13-02' YEAR TO MONTH AS STRING);
INTERVAL '-13-2' YEAR TO MONTH
> SELECT cast(INTERVAL '12:04.9900' MINUTE TO SECOND AS STRING);
INTERVAL '12:04.99' MINUTE TO SECOND
> SELECT cast(true AS STRING);
true
> SELECT cast(false AS STRING);
false
-- A bad UTF-8 string
> SELECT cast(x'33800033' AS STRING);
3�3
> SELECT hex(cast(x'33800033' AS STRING));
33800033
> SELECT cast(array('hello', NULL, 'world') AS STRING);
[hello, null, world]
> SELECT cast(array('hello', 'wor, ld') AS STRING);
[hello, wor, ld]
> SELECT cast(array() AS STRING);
[]
> SELECT cast(map('hello', 1, 'world', null) AS STRING);
{hello -> 1, world -> null}
> SELECT cast(map('hello -> 1', DATE'2022-01-01') AS STRING);
{hello -> 1 -> 2022-01-01}
> SELECT cast(map() AS STRING);
{}
> SELECT cast(named_struct('a', 5, 'b', 6, 'c', NULL) AS STRING);
{5, 6, null}
> SELECT cast(named_struct() AS STRING);
{}
> SELECT cast(DATE'2024-01-05'::VARIANT AS STRING);
2024-01-05
> SELECT cast(5 AS STRING) COLLATE UNICODE;
5
Datum
Wenn es sich um targetType einen DATE Typ handelt und sourceExpr vom Typ ist:
-
Das Ergebnis ist
NULLDATE. -
sourceExprmuss ein gültiges DateString sein.Wenn
sourceExprkein gültigerdateString-Typ ist, gibt Azure Databricks einen Fehler zurück.Verwenden Sie try_cast, um ungültige Datenfehler in
NULL. -
Das Ergebnis ist der Datumsteil des Zeitstempels
sourceExpr. -
Das Ergebnis ist der Datumsteil von timestamp_ntz
sourceExpr. -
Es gelten die Typregeln des Datentyps
VARIANTfür den Istwert.
Beispiele
> SELECT cast(NULL AS DATE);
NULL
> SELECT cast('1900-10-01' AS DATE);
1900-10-01
> SELECT cast('1900-10-01' AS DATE);
1900-10-01
-- There is no February 30.
> SELECT cast('1900-02-30' AS DATE);
Error
> SELECT cast(TIMESTAMP'1900-10-01 12:13:14' AS DATE);
1900-10-01
> SELECT cast(TIMESTAMP_NTZ'1900-10-01 12:13:14' AS DATE);
1900-10-01
> SELECT cast(TIMESTAMP_NTZ'1900-10-01 12:13:14'::VARIANT AS DATE);
1900-10-01
ZEITSTEMPEL
Wenn es sich um targetType einen TIMESTAMP Typ handelt und sourceExpr vom Typ ist:
-
Das Ergebnis ist
NULLDATE. -
sourceExprwird als Anzahl von Sekunden seit1970-01-01 00:00:00 UTC.Brüche kleiner als Mikrosekunden werden abgeschnitten.
Wenn der Wert außerhalb des Bereichs von
TIMESTAMPliegt, wird ein Überlauffehler ausgelöst.Verwenden Sie try_cast, um Überlauffehler in
NULL. -
sourceExprmuss ein gültiger TimestampString sein.Wenn
sourceExprkein gültigertimestampString-Typ ist, gibt Azure Databricks einen Fehler zurück.Verwenden Sie try_cast, um ungültige Datenfehler in
NULL. -
Das Ergebnis ist das
sourceExpr-DATEbei00:00:00Stunden.
Das Ergebnis ist ein Zeitstempelwert mit den gleichen Feldern Jahr/Monat/Tag/Stunde/Minute/Sekunde von timestamp_ntz sourceExpr.
-
Es gelten die Typregeln des Datentyps
VARIANTfür den Istwert.
Beispiele
> SELECT cast(NULL AS TIMESTAMP);
NULL
> SET TIME ZONE '+00:00';
> SELECT cast(0.0 AS TIMESTAMP);
1970-01-01 00:00:00
> SELECT cast(0.0000009 AS TIMESTAMP);
1970-01-01 00:00:00
> SELECT cast(1e20 AS TIMESTAMP);
Error: overflow
> SELECT cast('1900' AS TIMESTAMP);
1900-01-01 00:00:00
> SELECT cast('1900-10-01 12:13:14' AS TIMESTAMP);
1900-10-01 12:13:14
> SELECT cast('1900-02-30 12:13:14' AS TIMESTAMP);
Error
> SELECT cast(DATE'1900-10-01' AS TIMESTAMP);
1900-10-01 00:00:00
> SELECT cast(TIMESTAMP_NTZ'2023-01-01 02:03:04.567' as TIMESTAMP)
2023-01-01 02:03:04.567
> SELECT cast(DATE'1900-10-01'::VARIANT AS TIMESTAMP);
1900-10-01 00:00:00
TIMESTAMP_NTZ
Wenn es sich um targetType einen TIMESTAMP_NTZ Typ handelt und sourceExpr vom Typ ist:
-
Das Ergebnis ist
NULLDATE. -
sourceExprmuss ein gültiger TimestampString sein.Wenn
sourceExprkein gültigertimestampString-Typ ist, gibt Azure Databricks einen Fehler zurück.Verwenden Sie try_cast, um ungültige Datenfehler in
NULL. -
Das Ergebnis ist das
sourceExprDATUM zu00:00:00Stunden. -
Das Ergebnis ist die Ortszeit als
sourceExprin der Sitzungszeitzone. -
Es gelten die Typregeln des Datentyps
VARIANTfür den Istwert.
Beispiele
> SELECT cast(NULL AS TIMESTAMP_NTZ);
NULL
> SELECT cast('1900' AS TIMESTAMP_NTZ);
1900-01-01 00:00:00
> SELECT cast('1900-10-01 12:13:14' AS TIMESTAMP_NTZ);
1900-10-01 12:13:14
> SELECT cast('1900-02-30 12:13:14' AS TIMESTAMP_NTZ);
Error
> SELECT cast(DATE'1900-10-01' AS TIMESTAMP_NTZ);
1900-10-01 00:00:00
> SELECT current_timezone(), CAST(TIMESTAMP'2021-7-1T8:43:28' as TIMESTAMP_NTZ);
America/Los_Angeles 2021-07-01 08:43:28
> SELECT current_timezone(), CAST(TIMESTAMP'2021-7-1T8:43:28UTC+3' as TIMESTAMP_NTZ);
America/Los_Angeles 2021-06-30 22:43:28
> SELECT cast(DATE'1900-10-01'::VARIANT AS TIMESTAMP_NTZ);
1900-10-01 00:00:00
Jahr-Monat-Intervall
Wenn dies targetType ein Jahresmonatsintervall ist und sourceExpr vom Typ ist:
-
Das Ergebnis ist ein
NULL-Jahr-Monat-Intervall. -
Gilt für:
Databricks SQL
Databricks Runtime 11.3 LTS und höherDer numerische Datentyp wird als Anzahl niedrigerer Einheiten des
targetType-Intervalls von interpretiert. -
sourceExprmuss ein gültiges JahrMonthIntervalString sein.Wenn
sourceExprkein gültigeryearMonthIntervalString-Typ ist, gibt Azure Databricks einen Fehler zurück.Verwenden Sie try_cast, um ungültige Datenfehler in
NULL. -
Wenn der
targetType-Wert vonMONTHenthält, bleibt der Wert unverändert, wird jedoch erneut interpretiert, sodass er dem Zieltyp entspricht.Andernfalls wird das Ergebnis abgeschnitten, wenn der Quelltyp yearMonthIntervalQualifierenthält
MONTH.
Beispiele
> SELECT cast(NULL AS INTERVAL YEAR);
NULL
> SELECT cast('1-4' AS INTERVAL YEAR TO MONTH)::STRING;
INTERVAL '1-4' YEAR TO MONTH
> SELECT cast('1' AS INTERVAL YEAR TO MONTH);
error
> SELECT cast(INTERVAL '1-4' YEAR TO MONTH AS INTERVAL MONTH)::STRING;
INTERVAL '16' MONTH
> SELECT cast(14 AS INTERVAL YEAR TO MONTH)::STRING;
INTERVAL '1-2' YEAR TO MONTH
> SELECT cast(INTERVAL '1-11' YEAR TO MONTH AS INTERVAL YEAR)::STRING;
INTERVAL '1' YEAR
Tag-Zeit-Intervall
Wenn es targetType sich um ein Tagesintervall handelt und sourceExpr vom Typ ist:
-
Das Ergebnis ist ein
NULL-Tag-Zeit-Intervall. -
Gilt für:
Databricks SQL
Databricks Runtime 11.3 LTS und höherDer numerische Datentyp wird als Anzahl niedrigerer Einheiten des
targetType-Intervalls von interpretiert. Wenn die EinheitSECONDBrüche als Bruch sekunden interpretiert werden. -
sourceExprmuss ein gültiger dayTimeIntervalString sein.Wenn
sourceExprkein gültigerdayTimeIntervalString-Typ ist, gibt Azure Databricks einen Fehler zurück.Verwenden Sie try_cast, um ungültige Datenfehler in
NULL. -
Wenn der
targetType-Wert von die kleinste Einheit des Quelltyps dayTimeIntervalQualifier enthält, bleibt der Wert unverändert, wird jedoch erneut interpretiert, sodass er dem Zieltyp entspricht.Andernfalls wird das
sourceExprIntervall abgeschnitten, um dentargetTypeWert anzupassen.
> SELECT cast(NULL AS INTERVAL HOUR);
NULL
> SELECT cast('1 4:23' AS INTERVAL DAY TO MINUTE)::STRING;
INTERVAL '1 04:23' DAY TO MINUTE
> SELECT cast('1' AS INTERVAL DAY TO MINUTE);
error
> SELECT cast(INTERVAL '1 4:23' DAY TO MINUTE AS INTERVAL MINUTE)::STRING;
INTERVAL '1703' MINUTE
> SELECT cast(INTERVAL '1 4:23' DAY TO MINUTE AS INTERVAL HOUR)::STRING;
INTERVAL '28' HOUR
> SELECT cast(125.3 AS INTERVAL MINUTE TO SECOND)::STRING;
INTERVAL '2:5.3' MINUTE TO SECOND
Boolean
Wenn es targetType sich um ein BOOLEAN handelt und sourceExpr vom Typ ist:
-
Das Ergebnis ist ein
NULLvom TypBOOLEAN. -
Wenn
sourceExprgleich:0: Das Ergebnis istfalse.-
NULL: Das Ergebnis istNULL. -
special floating point value: Das Ergebnis isttrue.
Andernfalls ist das Ergebnis
true.-
-
Wenn bei
sourcEexprdie Groß- und Kleinschreibung nicht berücksichtigt wird:-
'T', 'TRUE', 'Y', 'YES', or '1': Das Ergebnis isttrue -
'F', 'FALSE', 'N', 'NO', or '0': Das Ergebnis istfalse -
NULL: Das Ergebnis istNULL
Andernfalls gibt Azure Databricks einen Fehler aufgrund ungültiger Eingabesyntax für den Typ „boolesch“ zurück.
Verwenden Sie try_cast, um ungültige Datenfehler in
NULL. -
-
Es gelten die Regeln des Typs des tatsächlichen Werts des
VARIANT-Typs.
Beispiele
> SELECT cast(NULL AS BOOLEAN);
NULL
> SELECT cast('T' AS BOOLEAN);
true
> SELECT cast('True' AS BOOLEAN);
true
> SELECT cast('1' AS BOOLEAN);
true
> SELECT cast('0' AS BOOLEAN);
false
> SELECT cast('n' AS BOOLEAN);
false
> SELECT cast('on' AS BOOLEAN);
error: invalid input syntax for type boolean
> SELECT cast(0 AS BOOLEAN);
false
> SELECT cast(0.0E10 AS BOOLEAN);
false
> SELECT cast(1 AS BOOLEAN);
true
> SELECT cast(0.1 AS BOOLEAN);
true
> SELECT cast('NaN'::FLOAT AS BOOLEAN);
true
> SELECT cast(1::VARIANT AS BOOLEAN);
true
BINÄR
Wenn es targetType sich um eine BINÄRdatei handelt und sourceExpr vom Typ ist:
-
Das Ergebnis ist ein
NULLvom TypBINARY. -
Das Ergebnis ist die UTF-8-Codierung der
surceExpr. -
Es gelten die Typregeln des Datentyps
VARIANTfür den Istwert.
Beispiele
> SELECT cast(NULL AS BINARY);
NULL
> SELECT hex(cast('Spark SQL' AS BINARY));
537061726B2053514C
> SELECT hex(cast('Oдesa' AS BINARY));
4FD0B4657361
> SELECT hex(cast('Oдesa'::VARIANT AS BINARY));
4FD0B4657361
ANORDNUNG
Wenn targetType ein ARRAY < targetElementType > ist und sourceExpr einen dieser Typen aufweist:
-
Das Ergebnis ist ein
NULL-Wert vontargeType. -
Wenn das Cast von
sourceElementTypezutargetElementTypeunterstützt wird, ist das Ergebnis eineARRAY<targetElementType>mit allen Elementen, die in das ElementtargetElementTypegegossen werden.Azure Databricks löst einen Fehler aus, wenn die Umwandlung nicht unterstützt wird oder wenn eines der Elemente nicht umgewandelt werden kann.
Verwenden Sie try_cast, um ungültige Daten oder Überlauffehler in
NULL. -
Es gelten die Typregeln des Datentyps
VARIANTfür den Istwert.
Beispiele
> SELECT cast(NULL AS ARRAY<INT>);
NULL
> SELECT cast(array('t', 'f', NULL) AS ARRAY<BOOLEAN>);
[true, false, NULL]
> SELECT cast(array('t', 'f', NULL) AS INTERVAL YEAR);
error: cannot cast array<string> to interval year
> SELECT cast(array('t', 'f', 'o') AS ARRAY<BOOLEAN>);
error: invalid input syntax for type boolean: o.
> SELECT cast(array('t', 'f', NULL)::VARIANT AS ARRAY<BOOLEAN>);
[true, false, NULL]
KARTE
Wenn targetType ein MAP< targetKeyType, targetValueType> ist und sourceExpr einen dieser Typen aufweist:
-
Das Ergebnis ist ein
NULL-Wert vontargetType. MAP <sourceKeyType, sourceValueType >
Wenn die Casts von
sourceKeyTypetargetKeyTypezu undsourceValueTypetargetValueTypezu unterstützt werden, ist das Ergebnis eineMAP<targetKeyType, targetValueType>mit allen Schlüsseln, die antargetKeyTypedietargetValueTypeund alle Werte gecastet werden.Azure Databricks löst einen Fehler aus, wenn die Umwandlung nicht unterstützt wird oder einer der Schlüssel oder Werte nicht umgewandelt werden kann.
Verwenden Sie try_cast, um ungültige Daten oder Überlauffehler in
NULL.-
Es gelten die Typregeln des Datentyps
VARIANTfür den Istwert. OBJECT < [sourceFieldName : sourceFieldType [, ...]] >
Jeder
sourceFieldNamevom TypSTRINGwird intargetKeyTypeumgewandelt und einem Zuordnungsschlüssel zugeordnet. Jeder Quellfeldwert vonsourceFieldTypewird intargetValueTypeumgewandelt und dem jeweiligen Zuordnungswert zugeordnet.Azure Databricks löst einen Fehler aus, wenn Umwandlungen nicht unterstützt werden oder wenn eines der Feldwerte oder Schlüsselwerte nicht umgewandelt werden können.
Verwenden Sie try_cast, um ungültige Daten oder Überlauffehler in
NULL.
Beispiele
> SELECT cast(NULL AS MAP<STRING, INT>);
NULL
> SELECT cast(map('10', 't', '15', 'f', '20', NULL) AS MAP<INT, BOOLEAN>);
{10 -> true, 15 -> false, 20 -> null}
> SELECT cast(map('10', 't', '15', 'f', '20', NULL) AS MAP<INT, ARRAY<INT>>);
error: cannot cast map<string,string> to map<int,array<int>>
> SELECT cast(map('10', 't', '15', 'f', '20', 'o') AS MAP<INT, BOOLEAN>);
error: invalid input syntax for type boolean: o.
-- Casting an OBJECT to a MAP
> SELECT schema_of_variant(parse_json('{"cars": 12, "bicycles": 5 }'));
OBJECT<bicycles: BIGINT, cars: BIGINT>
> SELECT CAST(parse_json('{"cars": 12, "bicycles": 5 }') AS MAP<STRING, INTEGER>);
{bicycles -> 5, cars -> 12}
STRUKTUR
Wenn targetType ein STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, …]] > ist und sourceExpr einen dieser Typen aufweist:
-
Das Ergebnis ist ein
NULL-Wert vontargetType. STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
Dieser
sourceExprkann intargetTypeumgewandelt werden, wenn alle diese Bedingungen erfüllt sind:- Der Quelltyp weist die gleiche Anzahl von Feldern wie das Ziel auf.
- Für alle Felder:
sourceFieldTypeNkann in dietargetFieldTypeN. - Für alle Feldwerte: Der Quellfeldwert N kann in
targetFieldTypeNgecastet werden, und der Wert ist nicht null, wenn das Zielfeld N alsNOT NULLmarkiert ist.
sourceFieldNames, Quelleinschränkungen und QuellsNOT NULLCOMMENTmüssen nicht mit demtargetTypeübereinstimmen und ignoriert werden.Azure Databricks löst einen Fehler aus, wenn die Umwandlung nicht unterstützt wird oder eines der Felder nicht umgewandelt werden kann.
Verwenden Sie try_cast, um ungültige Daten oder Überlauffehler in
NULL.-
Es gelten die Typregeln des Datentyps
VARIANTfür den Istwert. OBJECT < [sourceFieldName : sourceFieldType [, ...]] >
Alle
sourceFieldNamewerdensourceFieldNamezugeordnet. Jeder Quellfeldwert vonsourceFieldTypewird in den entsprechendentargetValueTypeumgewandelt und dem jeweiligen Zuordnungswert zugeordnet.Wenn ein
targetFieldNamenicht zugeordnet, ist der FeldwertNULL.Wenn ein
sourceFieldNamenicht zugeordnet ist, wird das Feld ignoriert.Azure Databricks löst einen Fehler aus, wenn Umwandlungen nicht unterstützt werden oder wenn eines der Feldwerte oder Schlüsselwerte nicht umgewandelt werden können.
Verwenden Sie try_cast, um ungültige Daten oder Überlauffehler in
NULL.
Beispiele
> SELECT cast(NULL AS STRUCT<a:INT>);
NULL
> SELECT cast(named_struct('a', 't', 'b', '1900-01-01') AS STRUCT<b:BOOLEAN, c:DATE NOT NULL COMMENT 'Hello'>);
{"b":true,"c":1900-01-01}
> SELECT cast(named_struct('a', 't', 'b', NULL::DATE) AS STRUCT<b:BOOLEAN, c:DATE NOT NULL COMMENT 'Hello'>);
error: cannot cast struct<a:string,b:date> to struct<b:boolean,c:date>
> SELECT cast(named_struct('a', 't', 'b', '1900') AS STRUCT<b:BOOLEAN, c:ARRAY<INT>>);
error: cannot cast struct<a:string,b:string> to struct<b:boolean,c:array<int>>
> SELECT cast(named_struct('a', 't', 'b', 'hello') AS STRUCT<b:BOOLEAN, c:DATE>);
error: Cannot cast hello to DateType
> SELECT cast(named_struct('a', 't', 'b', '1900-01-01')::VARIANT AS STRUCT<b:BOOLEAN, c:DATE NOT NULL COMMENT 'Hello'>);
{"b":true,"c":1900-01-01}
-- Casting an OBJECT to a STRUCT
> SELECT schema_of_variant(parse_json('{"name": "jason", "age": 25 }'));
OBJECT<age: BIGINT, name: STRING>
> SELECT CAST(parse_json('{"name": "jason", "age": 25 }') AS STRUCT<id: BIGINT, name: STRING>);
{"id":null,"name":"jason"}
VARIANTE
Wenn der targetType ein VARIANT-Typ ist und sourceExpr einer der folgenden Typen ist:
-
Das Ergebnis ist ein
NULLvom TypVARIANT. -
Das Ergebnis ist ein
VARIANT-Typ, der den numerischen Wert darstellt. Die Genauigkeit vonDECIMAL-Typen muss <= 38 sein.Alle ganzzahligen numerischen Werte werden
BIGINTzugeordnet.Alle
DECIMAL-Werte werden der kleinsten Genauigkeit und Skalierung zugeordnet. -
Das Ergebnis ist ein
VARIANT-Typ, der denSTRING-Wert darstellt. -
Das Ergebnis ist ein
VARIANT-Typ, der denDATE-Wert darstellt. -
Das Ergebnis ist ein
VARIANT-Typ, der denTIMESTAMP-Wert darstellt. -
Das Ergebnis ist ein
VARIANT-Typ, der denTIMESTAMP NTZ-Wert darstellt. -
Das Ergebnis ist ein
VARIANT-Typ, der denBOOLEAN-Wert darstellt. -
Das Ergebnis ist ein
VARIANT-Typ, der denBINARY-Wert darstellt. -
Wenn die Umwandlung von
sourceElementTypeinVARIANTunterstützt wird, ist das Ergebnis einVARIANT-Typ, derARRAY<sourceElementType>darstellt.Azure Databricks löst einen Fehler aus, wenn die Umwandlung nicht unterstützt wird.
-
Diese Umwandlung wird nicht direkt unterstützt, da
VARIANTdie Reihenfolge der Strukturfelder nicht beibehalten kann. Verwenden Sie to_variant_object, umSTRUCTin einOBJECTalsVARIANTzu konvertieren. -
Diese Umwandlung wird nicht direkt unterstützt, da
VARIANTderMAPTyp nicht beibehalten werden kann. Verwenden Sie to_variant_object, umMAPinVARIANTzu konvertieren als einOBJECT. Die Kartenschlüssel müssen Zeichenfolgen sein.Azure Databricks löst einen Fehler aus, wenn die Umwandlung nicht unterstützt wird.
Verwenden Sie try_cast, um ungültige Daten oder Überlauffehler in
NULL.
Beispiele
> SELECT cast(NULL AS VARIANT);
NULL
> SELECT cast(5.1000 AS VARIANT);
5.1
> SELECT schema_of_variant(cast(5 AS VARIANT));
BIGINT