cast-Funktion

Gilt für:durch Häkchen mit „Ja“ markiert Databricks SQL durch Häkchen mit „Ja“ markiert 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
VOID J Y Y Y Y Y Y Y Y Y Y Y J
numeric N J Y N Y N J Y Y N N N N
STRING N J Y Y Y Y Y Y Y Y N N N
DATE N N J Y Y Y N N N N N N N
TIMESTAMP N J Y Y Y Y N N N N N N N
TIMESTAMP_NTZ N N J Y Y Y N N N N N N N
year-month interval N J Y N N N Y N N N N N N
day-time interval N J Y N N N N Y N N N N N
BOOLEAN N J Y N Y N N N Y N N N N
BINARY N J Y N N N N N N Y N N N
ARRAY N N Y N N N N N N N Y N N
MAP N N Y N N N N N N N N Y N
STRUCT N N Y N N N N N N N N N J

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:

  • VOID

    Das Ergebnis ist eine NULL des angegebenen numerischen Typs.

  • numeric

    Wenn targetType es sich um eine integrale Zahl handelt, wird sourceExpr das Ergebnis auf eine ganze Zahl abgeschnitten.

    Andernfalls ist das Ergebnis sourceExprgerundet um der verfügbaren Skala von targetType zu entsprechen.

    Wenn der Wert außerhalb des Bereichs von targetType liegt, wird ein Überlauffehler ausgelöst.

    Verwenden Sie try_cast, um Überlauffehler in NULL.

  • STRING

    sourceExpr wird als Literalwert des Werts targetTypedes 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.

  • TIMESTAMP

    Das Ergebnis ist die Anzahl der Sekunden, die zwischen 1970-01-01 00:00:00 UTC und sourceExpr.

    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 targetTypeliegt, wird ein Überlauffehler ausgelöst.

    Verwenden Sie try_cast, um Überlauffehler in NULL.

  • INTERVAL

    Gilt für:Häkchen ja Databricks SQL Häkchen 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 von lower_unit gemessen. Wenn lower_unit der Wert SECOND ist, werden Sekundenbruchteile rechts vom Dezimalpunkt gespeichert. Für alle anderen Intervalle ist das Ergebnis immer eine integrale Zahl.

  • BOOLEAN

    Wenn sourceExpr gleich:

    • true: Das Ergebnis ist 0.
    • false: Das Ergebnis ist 1.
    • NULL: Das Ergebnis ist NULL.

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

STRING

Wenn es sich um targetType einen STRING-Typ handelt und sourceExpr vom Typ ist:

  • VOID

    Das Ergebnis ist eine NULL-Zeichenfolge.

  • exact numeric

    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) mit s größerem 0 ist, wird ein Dezimalpunkt hinzugefügt und nachgestellte Nullen werden zur Skalierung hinzugefügt.

  • floating-point binary

    Ist die absolute Zahl kleiner 10,000,000 und größer oder gleich als 0.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.

  • DATE

    Wenn das Jahr zwischen 9999 BCE und 9999 CE liegt, ist das Ergebnis eine DatumsZeichenfolge des Formulars -YYYY-MM-DD und YYYY-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.

  • TIMESTAMP

    Wenn das Jahr zwischen 9999 BCE und 9999 CE liegt, ist das Ergebnis eine ZeitstempelZeichenfolge des Formulars -YYYY-MM-DD hh:mm:ss und YYYY-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.

  • TIMESTAMP_NTZ

    Wenn das Jahr zwischen 9999 BCE und 9999 CE liegt, ist das Ergebnis eine ZeitstempelZeichenfolge des Formulars -YYYY-MM-DD hh:mm:ss und YYYY-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.

  • year-month interval

    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' YEAR
    • INTERVAL 'Y-M' YEAR TO MONTH
    • INTERVAL 'M' MONTH
  • day-time interval

    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' 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
  • BOOLEAN

    Das Ergebnis des true booleschen Werts ist der STRING-Literal true, für false den es sich um die STRING-Literal falsehandelt, und für NULL die NULL-Zeichenfolge.

  • BINARY

    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 zu STRING wird nie Ersatzzeichen einfügen oder einen Fehler auslösen.

  • ARRAY

    Das Ergebnis ist eine durch Komma getrennte Liste von Castelementen, die mit quadratischen Klammern [ ]geklammert ist. Ein Leerzeichen folgt jedem Komma. Ein NULL Element wird in ein Literal nullübersetzt.

    Azure Databricks markiert einzelne Elemente, die selbst Klammern oder Kommas enthalten können, nicht mit Anführungszeichen oder auf andere Art.

  • MAP

    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. Ein NULL Kartenwert wird in Literal nullü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.

  • STRUCT

    Das Ergebnis ist eine durch Komma getrennte Liste von Castfeldwerten, die mit geschweiften Klammern { }geklammert ist. Ein Leerzeichen folgt jedem Komma. Ein NULL Feldwert wird in einen Literal nullübersetzt.

    Azure Databricks markiert einzelne Feldwerte, die selbst geschweifte Klammern oder Kommas enthalten können, nicht mit Anführungszeichen oder auf andere Art.

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);
  {}

DATE

Wenn es sich um targetType einen DATUMstyp handelt und sourceExpr vom Typ ist:

  • VOID

    Das Ergebnis ist ein NULL-DATUM.

  • STRING

    sourceExpr muss ein gültiges DateString sein.

    Wenn sourceExpr kein gültiger dateString-Typ ist, gibt Azure Databricks einen Fehler zurück.

    Verwenden Sie try_cast, um ungültige Datenfehler in NULL.

  • TIMESTAMP

    Das Ergebnis ist der Datumsteil des Zeitstempels sourceExpr.

  • TIMESTAMP_NTZ

    Das Ergebnis ist der Datumsteil von timestamp_ntz sourceExpr.

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

TIMESTAMP

Wenn es sich um targetType einen TIMESTAMP-Typ handelt und sourceExpr vom Typ ist:

  • VOID

    Das Ergebnis ist ein NULL-DATUM.

  • numeric

    sourceExpr wird als Anzahl von Sekunden seit 1970-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.

  • STRING

    sourceExpr muss ein gültiger TimestampString sein.

    Wenn sourceExpr kein gültiger timestampString-Typ ist, gibt Azure Databricks einen Fehler zurück.

    Verwenden Sie try_cast, um ungültige Datenfehler in NULL.

  • DATE

    Das Ergebnis ist das sourceExpr DATUM zu 00:00:00Stunden.

  • TIMESTAMP_NTZ

Das Ergebnis ist ein Zeitstempelwert mit den gleichen Feldern Jahr/Monat/Tag/Stunde/Minute/Sekunde von timestamp_ntz sourceExpr.

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

TIMESTAMP_NTZ

Wenn es sich bei targetType um einen TIMESTAMP_NTZ-Typ handelt und sourceExpr vom Typ ist:

  • VOID

    Das Ergebnis ist ein NULL-DATUM.

  • STRING

    sourceExpr muss ein gültiger TimestampString sein.

    Wenn sourceExpr kein gültiger timestampString-Typ ist, gibt Azure Databricks einen Fehler zurück.

    Verwenden Sie try_cast, um ungültige Datenfehler in NULL.

  • DATE

    Das Ergebnis ist das sourceExpr DATUM zu 00:00:00Stunden.

  • TIMESTAMP

Das Ergebnis ist die Ortszeit als sourceExpr in der Sitzungszeitzone.

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

Jahr-Monat-Intervall

Wenn dies targetType ein Jahresmonatsintervall ist und sourceExpr vom Typ ist:

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:

  • VOID

    Das Ergebnis ist ein NULL-Tagesintervall.

  • exact_numeric

    Gilt für:Häkchen ja Databricks SQL Häkchen Databricks Runtime 11.3 LTS und höher

    Die Numerische wird als Anzahl niedrigerer Einheiten des targetTypedayTimeIntervalQualifier interpretiert. Wenn die Einheit SECOND Brüche als Bruch sekunden interpretiert werden.

  • STRING

    sourceExpr muss ein gültiger dayTimeIntervalString sein.

    Wenn sourceExpr kein gültiger dayTimeIntervalString-Typ ist, gibt Azure Databricks einen Fehler zurück.

    Verwenden Sie try_cast, um ungültige Datenfehler in NULL.

  • day-time interval

    Wenn der targetTypedayTimeIntervalQualifier die kleinste Einheit des Quelltyps dayTimeIntervalQualifier enthält, bleibt der Wert unverändert, wird jedoch erneut interpretiert, um dem Zieltyp zu entsprechen.

    Andernfalls wird das sourceExpr Intervall abgeschnitten, um den targetTypeWert 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:

  • VOID

    Das Ergebnis ist ein NULL Boolean.

  • numeric

    Wenn sourceExpr gleich:

    • 0: Das Ergebnis ist false.

      Andernfalls ist das Ergebnis true.

  • STRING

    Wenn bei sourcEexpr die Groß- und Kleinschreibung nicht berücksichtigt wird:

    • 'T', 'TRUE', 'Y', 'YES', or '1': Das Ergebnis ist true
    • 'F', 'FALSE', 'N', 'NO', or '0': Das Ergebnis ist false
    • NULL: Das Ergebnis ist NULL

    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.

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

BINARY

Wenn es targetType sich um eine BINÄRdatei handelt und sourceExpr vom Typ ist:

  • VOID

    Das Ergebnis ist eine NULL-Binärdatei.

  • STRING

    Das Ergebnis ist die UTF-8-Codierung der surceExpr.

Beispiele

> SELECT cast(NULL AS BINARY);
  NULL

> SELECT hex(cast('Spark SQL' AS BINARY));
  537061726B2053514C

> SELECT hex(cast('Oдesa' AS BINARY));
  4FD0B4657361

ARRAY

Wenn targetType ein ARRAY < targetElementType > ist und sourceExpr einen dieser Typen aufweist:

  • VOID

    Das Ergebnis ist ein NULL-Wert von targeType.

  • ARRAY < sourceElementType >

    Wenn das Cast von sourceElementType zu targetElementType unterstützt wird, ist das Ergebnis eine ARRAY<targetElementType> mit allen Elementen, die in das Element targetElementTypegegossen 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.

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.

MAP

Wenn targetType ein MAP< targetKeyType, targetValueType> ist und sourceExpr einen dieser Typen aufweist:

  • VOID

    Das Ergebnis ist ein NULL-Wert von targetType.

  • MAP <sourceKeyType, sourceValueType >

    Wenn die Casts von sourceKeyTypetargetKeyType zu und sourceValueTypetargetValueType zu unterstützt werden, ist das Ergebnis eine MAP<targetKeyType, targetValueType> mit allen Schlüsseln, die an targetKeyTypedie targetValueType 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.

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.

STRUCT

Wenn targetType ein STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, …]] > ist und sourceExpr einen dieser Typen aufweist:

  • VOID

    Das Ergebnis ist ein NULL-Wert von targetType.

  • STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, …]] >

    Dies sourceExpr kann so erfolgen targetType, wenn alle Bedingungen wahr sind:

    • Der Quelltyp weist die gleiche Anzahl von Feldern wie das Ziel auf.
    • Für alle Felder: sourceFieldTypeN kann in die targetFieldTypeN.
    • Für alle Feldwerte: Der Quellfeldwert N kann in N gecastet targetFieldTypeN werden, und der Wert ist nicht null, wenn das Zielfeld N als NOT NULLgekennzeichnet ist.

    sourceFieldNames, Quelleinschränkungen und Quells NOT NULLCOMMENTmüssen nicht mit dem targetType übereinstimmen und ignoriert 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.

Beispiele

> SELECT cast(NULL AS STRUCT<a:INT>);
  NULL

> SELECT cast(named_struct('a', 't', 'b', '1900') 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