Freigeben über


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 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:

  • VOID

    Das Ergebnis ist ein NULL-Wert des angegebenen numerischen Typs.

  • numeric

    Wenn es sich bei targetType um einen integralen numerischen Datentyp handelt, ist das Ergebnis sourceExpr, auf eine ganze Zahl abgeschnitten.

    Andernfalls ist das Ergebnis sourceExpr, auf eine verfügbare Skalierung von targetType gerundet.

    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 1.
    • false: Das Ergebnis ist 0.
    • NULL: Das Ergebnis ist NULL.
  • VARIANT

    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:

  • 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 booleschen Ausdrucks true ist der STRING-Literal true. Für false ist das Ergebnis das STRING-Literal false. Für NULL ist das Ergebnis 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.

  • VARIANT

    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:

  • VOID

    Das Ergebnis ist NULL DATE.

  • 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.

  • VARIANT

    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:

  • VOID

    Das Ergebnis ist NULL DATE.

  • 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-DATE bei 00:00:00 Stunden.

  • TIMESTAMP_NTZ

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

  • VARIANT

    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:

  • VOID

    Das Ergebnis ist NULL DATE.

  • 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.

  • VARIANT

    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:

  • VOID

    Das Ergebnis ist ein NULL-Jahr-Monat-Intervall.

  • integral_numeric

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

    Der numerische Datentyp wird als Anzahl niedrigerer Einheiten des yearmonthIntervalQualifier-Intervalls von targetType interpretiert.

  • STRING

    sourceExpr muss ein gültiges JahrMonthIntervalString sein.

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

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

  • year-month interval

    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:

  • VOID

    Das Ergebnis ist ein NULL-Tag-Zeit-Intervall.

  • exact_numeric

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

    Der numerische Datentyp wird als Anzahl niedrigerer Einheiten des dayTimeIntervalQualifier-Intervalls von targetType 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 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 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 vom Typ 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.

  • VARIANT

    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:

  • VOID

    Das Ergebnis ist ein NULL vom Typ BINARY.

  • STRING

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

  • VARIANT

    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:

  • 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.

  • VARIANT

    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:

  • 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.

  • VARIANT

    Es gelten die Typregeln des Datentyps VARIANT für den Istwert.

  • OBJECT < [sourceFieldName : sourceFieldType [, …]] >

    Jeder sourceFieldName vom Typ STRING wird in targetKeyType umgewandelt und einem Zuordnungsschlüssel zugeordnet. Jeder Quellfeldwert von sourceFieldType wird in targetValueType 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:

  • VOID

    Das Ergebnis ist ein NULL-Wert von targetType.

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

    Dieser sourceExpr kann in targetType 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 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 Felder nicht umgewandelt werden können.

    Verwenden Sie try_cast, um ungültige Daten oder Überlauffehler in NULL.

  • VARIANT

    Es gelten die Typregeln des Datentyps VARIANT für den Istwert.

  • OBJECT < [sourceFieldName : sourceFieldType [, …]] >

    Alle sourceFieldName werden sourceFieldName zugeordnet. Jeder Quellfeldwert von sourceFieldType wird in den entsprechenden targetValueType umgewandelt und dem jeweiligen Zuordnungswert zugeordnet.

    Wenn ein targetFieldName nicht zugeordnet, ist der Feldwert NULL.

    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:

  • VOID

    Das Ergebnis ist ein NULL vom Typ VARIANT.

  • numeric

    Das Ergebnis ist ein VARIANT-Typ, der den numerischen Wert darstellt. Die Genauigkeit von DECIMAL-Typen muss <= 38 sein.

    Alle ganzzahligen numerischen Werte werden BIGINT zugeordnet.

    Alle DECIMAL-Werte werden der kleinsten Genauigkeit und Skalierung zugeordnet.

  • STRING

    Das Ergebnis ist ein VARIANT-Typ, der den STRING-Wert darstellt.

  • DATE

    Das Ergebnis ist ein VARIANT-Typ, der den DATE-Wert darstellt.

  • TIMESTAMP

    Das Ergebnis ist ein VARIANT-Typ, der den TIMESTAMP-Wert darstellt.

  • TIMESTAMP_NTZ

    Das Ergebnis ist ein VARIANT-Typ, der den TIMESTAMP NTZ-Wert darstellt.

  • BOOLEAN

    Das Ergebnis ist ein VARIANT-Typ, der den BOOLEAN-Wert darstellt.

  • BINARY

    Das Ergebnis ist ein VARIANT-Typ, der den BINARY-Wert darstellt.

  • ARRAY < sourceElementType >

    Wenn die Umwandlung von sourceElementType in VARIANT unterstützt wird, ist das Ergebnis ein VARIANT-Typ, der ARRAY<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