cast
-Funktion
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) | VOID | numeric | STRING | DATE | TIMESTAMP | TIMESTAMP_NTZ | year-month interval | day-time interval | BOOLEAN | BINARY | ARRAY | MAP | STRUCT | VARIANT | OBJECT |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
VOID | J | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N |
numeric | N | J | Y | N | Y | N | J | Y | Y | N | N | N | N | Y | N |
STRING | N | J | Y | Y | Y | Y | Y | Y | Y | Y | N | N | N | Y | N |
DATE | N | N | J | Y | Y | Y | N | N | N | N | N | N | N | Y | N |
TIMESTAMP | N | J | Y | Y | Y | Y | N | N | N | N | N | N | N | Y | N |
TIMESTAMP_NTZ | N | N | J | Y | Y | Y | N | N | N | N | N | N | N | Y | N |
year-month interval | N | J | Y | N | N | N | Y | N | N | N | N | N | N | N | N |
day-time interval | N | J | Y | N | N | N | N | Y | N | N | N | N | N | N | N |
BOOLEAN | N | J | Y | N | Y | N | N | N | Y | N | N | N | N | Y | N |
BINARY | N | J | Y | N | N | N | N | N | N | Y | N | N | N | Y | N |
ARRAY | N | N | Y | N | N | N | N | N | N | N | Y | N | N | Y | N |
MAP | N | N | Y | N | N | N | N | N | N | N | N | Y | N | N | N |
STRUCT | N | N | Y | N | N | N | N | N | N | N | N | N | Y | N | N |
VARIANT | N | J | Y | Y | Y | Y | N | N | J | Y | Y | Y | Y | Y | N |
OBJECT | N | N | N | N | N | N | N | N | N | N | N | J | Y | 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
.
numeric
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
targetType
um einen integralen numerischen Datentyp handelt, ist das ErgebnissourceExpr
, auf eine ganze Zahl abgeschnitten.Andernfalls ist das Ergebnis
sourceExpr
, auf eine verfügbare Skalierung vontargetType
gerundet.Wenn der Wert außerhalb des Bereichs von
targetType
liegt, wird ein Überlauffehler ausgelöst.Verwenden Sie try_cast, um Überlauffehler in
NULL
. -
sourceExpr
wird als Literalwert des WertstargetType
des Werts gelesen.Wenn
sourceExpr
das Format für Literalwerte nicht erfüllt ist, wird ein Fehler ausgelöst.Wenn der Wert außerhalb des Bereichs von
targetType
liegt, 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 UTC
undsourceExpr
.Wenn
targetType
es 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
targetType
liegt, 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öher
Zieltyp muss ein exakter numerischer Wert sein.
Bei einem
INTERVAL upper_unit TO lower_unit
wird das Ergebnis als Gesamtzahl vonlower_unit
gemessen. Wennlower_unit
der WertSECOND
ist, werden Sekundenbruchteile rechts vom Dezimalpunkt gespeichert. Für alle anderen Intervalle ist das Ergebnis immer eine integrale Zahl. -
Wenn
sourceExpr
gleich: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
STRING
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
targetType
DECIMAL(p, s)
mits
größerem 0 ist, wird ein Dezimalpunkt hinzugefügt und nachgestellte Nullen werden zur Skalierung hinzugefügt. -
Ist die absolute Zahl kleiner
10,000,000
und 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
E
und 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-DD
undYYYY-MM-DD
jeweils.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:ss
undYYYY-MM-DD hh:mm:ss
jeweils.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:ss
undYYYY-MM-DD hh:mm:ss
jeweils.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-string
Datei 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' YEAR
INTERVAL 'Y-M' YEAR TO MONTH
INTERVAL 'M' MONTH
-
Das Ergebnis ist die kürzeste Darstellung des Intervalls Literal. Wenn das Intervall negativ ist, wird das Zeichen in die
interval-string
Datei eingebettet. Bei Einheiten, die kleiner als 10 sind, werden führende Nullen ausgelassen.Eine typische Tageszeitintervallzeichenfolge weist das Formular auf:
INTERVAL 'D' DAY
INTERVAL 'D h' DAY TO HOUR
INTERVAL 'D h:m' DAY TO MINUTE
INTERVAL 'D h:m:s' DAY TO SECOND
INTERVAL 'h' HOUR
INTERVAL 'h:m' HOUR TO MINUTE
INTERVAL 'm:s' MINUTE TO SECOND
INTERVAL 's' SECOND
-
Das Ergebnis des booleschen Ausdrucks
true
ist derSTRING
-Literaltrue
. Fürfalse
ist das Ergebnis das STRING-Literalfalse
. FürNULL
ist das Ergebnis die NULL-Zeichenfolge. -
Ein Ergebnis ist die Binärdatei
sourceExpr
, die als UTF-8-Zeichensequenz interpretiert wird.Azure Databricks überprüft die UTF-8-Zeichen nicht. Ein Cast von
BINARY
zuSTRING
wird 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. EinNULL
Element wird in ein Literalnull
übersetzt.Azure Databricks markiert einzelne Elemente, die selbst Klammern oder Kommas enthalten können, nicht mit Anführungszeichen oder auf andere Art.
-
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. EinNULL
Kartenwert wird in Literalnull
übersetzt.Azure Databricks markiert einzelne Schlüssel oder Werte, die selbst geschweifte Klammern, Kommas oder
->
-Zeichen enthalten können, nicht mit Anführungszeichen oder auf andere Art. -
Das Ergebnis ist eine durch Komma getrennte Liste von Castfeldwerten, die mit geschweiften Klammern
{ }
geklammert ist. Ein Leerzeichen folgt jedem Komma. EinNULL
Feldwert wird in einen Literalnull
übersetzt.Azure Databricks markiert einzelne Feldwerte, die selbst geschweifte Klammern oder Kommas enthalten können, nicht mit Anführungszeichen oder auf andere Art.
-
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
DATE
Wenn es sich um targetType
einen DATUMstyp handelt und sourceExpr
vom Typ ist:
-
Das Ergebnis ist
NULL
DATE
. -
sourceExpr
muss ein gültiges DateString sein.Wenn
sourceExpr
kein 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
VARIANT
fü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
TIMESTAMP
Wenn es sich um targetType
einen TIMESTAMP-Typ handelt und sourceExpr
vom Typ ist:
-
Das Ergebnis ist
NULL
DATE
. -
sourceExpr
wird 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
TIMESTAMP
liegt, wird ein Überlauffehler ausgelöst.Verwenden Sie try_cast, um Überlauffehler in
NULL
. -
sourceExpr
muss ein gültiger TimestampString sein.Wenn
sourceExpr
kein 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
-DATE
bei00:00:00
Stunden.
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
VARIANT
fü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 bei targetType
um einen TIMESTAMP_NTZ-Typ handelt und sourceExpr
vom Typ ist:
-
Das Ergebnis ist
NULL
DATE
. -
sourceExpr
muss ein gültiger TimestampString sein.Wenn
sourceExpr
kein 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
DATUM zu00:00:00
Stunden. -
Das Ergebnis ist die Ortszeit als
sourceExpr
in der Sitzungszeitzone. -
Es gelten die Typregeln des Datentyps
VARIANT
fü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öher
Der numerische Datentyp wird als Anzahl niedrigerer Einheiten des yearmonthIntervalQualifier-Intervalls von
targetType
interpretiert. -
sourceExpr
muss ein gültiges JahrMonthIntervalString sein.Wenn
sourceExpr
kein gültigeryearMonthIntervalString
-Typ ist, gibt Azure Databricks einen Fehler zurück.Verwenden Sie try_cast, um ungültige Datenfehler in
NULL
. -
Wenn der yearMonthIntervalQualifier-Wert von
targetType
MONTH
enthä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öher
Der numerische Datentyp wird als Anzahl niedrigerer Einheiten des dayTimeIntervalQualifier-Intervalls von
targetType
interpretiert. Wenn die EinheitSECOND
Brüche als Bruch sekunden interpretiert werden. -
sourceExpr
muss ein gültiger dayTimeIntervalString sein.Wenn
sourceExpr
kein gültigerdayTimeIntervalString
-Typ ist, gibt Azure Databricks einen Fehler zurück.Verwenden Sie try_cast, um ungültige Datenfehler in
NULL
. -
Wenn der dayTimeIntervalQualifier-Wert von
targetType
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
sourceExpr
Intervall abgeschnitten, um dentargetType
Wert 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
NULL
vom TypBOOLEAN
. -
Wenn
sourceExpr
gleich:0
: Das Ergebnis istfalse
.NULL
: Das Ergebnis istNULL
.special floating point value
: Das Ergebnis isttrue
.
Andernfalls ist das Ergebnis
true
.
-
Wenn bei
sourcEexpr
die 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
BINARY
Wenn es targetType
sich um eine BINÄRdatei handelt und sourceExpr
vom Typ ist:
-
Das Ergebnis ist ein
NULL
vom TypBINARY
. -
Das Ergebnis ist die UTF-8-Codierung der
surceExpr
. -
Es gelten die Typregeln des Datentyps
VARIANT
fü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
ARRAY
Wenn targetType
ein ARRAY < targetElementType > ist und sourceExpr
einen dieser Typen aufweist:
-
Das Ergebnis ist ein
NULL
-Wert vontargeType
. -
Wenn das Cast von
sourceElementType
zutargetElementType
unterstützt wird, ist das Ergebnis eineARRAY<targetElementType>
mit allen Elementen, die in das ElementtargetElementType
gegossen werden.Azure Databricks gibt einen Fehler aus, wenn die Umwandlung nicht unterstützt wird oder 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
VARIANT
fü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]
MAP
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
sourceKeyType
targetKeyType
zu undsourceValueType
targetValueType
zu unterstützt werden, ist das Ergebnis eineMAP<targetKeyType, targetValueType>
mit allen Schlüsseln, die antargetKeyType
dietargetValueType
und alle Werte gecastet werden.Azure Databricks gibt 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
VARIANT
für den Istwert. OBJECT < [sourceFieldName : sourceFieldType [, …]] >
Jeder
sourceFieldName
vom TypSTRING
wird intargetKeyType
umgewandelt und einem Zuordnungsschlüssel zugeordnet. Jeder Quellfeldwert vonsourceFieldType
wird intargetValueType
umgewandelt und dem jeweiligen Zuordnungswert zugeordnet.Azure Databricks löst einen Fehler aus, wenn Umwandlungen nicht unterstützt werden oder wenn 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}
STRUCT
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
sourceExpr
kann intargetType
umgewandelt werden, wenn alle diese Bedingungen erfüllt sind:- Der Quelltyp weist die gleiche Anzahl von Feldern wie das Ziel auf.
- Für alle Felder:
sourceFieldTypeN
kann in dietargetFieldTypeN
. - Für alle Feldwerte: Der Quellfeldwert N kann in N gecastet
targetFieldTypeN
werden, und der Wert ist nicht null, wenn das Zielfeld N alsNOT NULL
gekennzeichnet ist.
sourceFieldName
s, Quelleinschränkungen und QuellsNOT NULL
COMMENT
müssen nicht mit demtargetType
übereinstimmen und ignoriert werden.Azure Databricks gibt einen Fehler aus, wenn die Umwandlung nicht unterstützt wird oder Felder nicht umgewandelt werden können.
Verwenden Sie try_cast, um ungültige Daten oder Überlauffehler in
NULL
.-
Es gelten die Typregeln des Datentyps
VARIANT
für den Istwert. OBJECT < [sourceFieldName : sourceFieldType [, …]] >
Alle
sourceFieldName
werdensourceFieldName
zugeordnet. Jeder Quellfeldwert vonsourceFieldType
wird in den entsprechendentargetValueType
umgewandelt und dem jeweiligen Zuordnungswert zugeordnet.Wenn ein
targetFieldName
nicht zugeordnet, ist der FeldwertNULL
.Wenn ein
sourceFieldName
nicht zugeordnet ist, wird das Feld ignoriert.Azure Databricks löst einen Fehler aus, wenn Umwandlungen nicht unterstützt werden oder wenn 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"}
VARIANT
Wenn der targetType
ein VARIANT-Typ ist und sourceExpr
einer der folgenden Typen ist:
-
Das Ergebnis ist ein
NULL
vom TypVARIANT
. -
Das Ergebnis ist ein
VARIANT
-Typ, der den numerischen Wert darstellt. Die Genauigkeit vonDECIMAL
-Typen muss <= 38 sein.Alle ganzzahligen numerischen Werte werden
BIGINT
zugeordnet.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
sourceElementType
inVARIANT
unterstützt wird, ist das Ergebnis einVARIANT
-Typ, derARRAY<sourceElementType>
darstellt.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