Compartir a través de


Función cast

Se aplica a:casilla marcada como Sí Databricks SQL casilla marcada como Sí Databricks Runtime

Convierte el valor expr al tipo de datos de destino type. Este operador es un sinónimo del :: operador (signo de dos puntos)

Sintaxis

cast(sourceExpr AS targetType)

Argumentos

  • sourceExpr: cualquier expresión que se pueda convertir.
  • targetType: el tipo de datos del resultado.

Devoluciones

El resultado es de tipo targetType.

Las siguientes combinaciones de conversión de tipos de datos son válidas:

Origen (fila) Destino (columna) VACÍO numérico CADENA FECHA TIMESTAMP TIMESTAMP_NTZ intervalo de año-mes intervalo de tiempo de día BOOLEAN BINARIO ARREGLO MAPA ESTRUCTURA VARIANT OBJECT de
VACÍO Y Y Y Y Y Y Y Y Y Y Y Y Y Y No
numérico No Y Y No Y No Y Y Y No No No No Y No
CADENA No Y Y Y Y Y Y Y Y Y No No No Y No
FECHA No No Y Y Y Y No No No No No No No Y No
TIMESTAMP No Y Y Y Y Y No No No No No No No Y No
TIMESTAMP_NTZ No No Y Y Y Y No No No No No No No Y No
intervalo de año-mes No Y Y No No No Y No No No No No No No No
intervalo de tiempo de día No Y Y No No No No Y No No No No No No No
BOOLEAN No Y Y No Y No No No Y No No No No Y No
BINARIO No Y Y No No No No No No Y No No No Y No
ARREGLO No No Y No No No No No No No Y No No Y No
MAPA No No Y No No No No No No No No Y No No No
ESTRUCTURA No No Y No No No No No No No No No Y No No
VARIANT No Y Y Y Y Y No No Y Y Y Y Y Y No
OBJECT de No No No No No No No No No No No Y Y No No

Reglas y limitaciones basadas en targetType

Advertencia

En Databricks Runtime, si spark.sql.ansi.enabled es false, un desbordamiento no provoca un error, sino que "ajusta" el resultado.

Un valor sourceExpr con un formato no válido o caracteres no válidos para targetType dará como resultado un NULL.

NUMERIC

Si targetType es un valor numérico y sourceExpr es de tipo:

  • VACÍO

    El resultado es un valor NULL del tipo numérico especificado.

  • numérico

    Si targetType es un valor numérico integral, el resultado se sourceExprtrunca para convertirse en un número entero.

    De lo contrario, el resultado se sourceExprredondea a un ajuste de la escala disponible de targetType.

    Si el valor está fuera del intervalo de targetType, se genera un error de desbordamiento.

    Use try_cast para convertir errores de desbordamiento en NULL.

  • CUERDA

    sourceExpr se lee como un valor literal de targetType.

    Si sourceExpr no cumple el formato de los valores literales, se genera un error.

    Si el valor está fuera del intervalo de targetType, se genera un error de desbordamiento.

    Use try_cast para convertir los errores de desbordamiento y formato no válidos en NULL.

  • TIMESTAMP

    El resultado es el número de segundos transcurridos entre 1970-01-01 00:00:00 UTC y sourceExpr.

    Si targetType es un valor numérico integral, el resultado se trunca en un número entero.

    De lo contrario, el resultado se redondea a un ajuste de la escala disponible de targetType.

    Si el resultado está fuera del intervalo de targetType, se genera un error de desbordamiento.

    Use try_cast para convertir errores de desbordamiento en NULL.

  • INTERVALO

    Se aplica a:casilla marcada como sí Databricks SQL casilla marcada como Sí Databricks Runtime 11.3 LTS y versiones posteriores

    El tipo de destino debe ser un valor numérico exacto.

    Dado un INTERVAL upper_unit TO lower_unit, el resultado se mide en el número total de lower_unit. Si lower_unit es SECOND, las fracciones de segundo se almacenan a la derecha del separador decimal. Para todos los demás intervalos, el resultado siempre es un número entero.

  • BOOLEANO

    Si sourceExpr es:

    • true: el resultado es 1.
    • false: el resultado es 0.
    • NULL: el resultado es NULL.
  • VARIANTE

    Se aplican las reglas del tipo del valor real del tipo VARIANT.

Ejemplos

> 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

CUERDA

Si el sourceExpr es un STRING, el STRING resultante hereda la intercalación de sourceExpr. En todos los demás casos, la intercalación del resultado STRING es la intercalación predeterminada.

Para cambiar la intercalación, agregue la expresión intercalación.

Si targetType es un tipo de STRING y sourceExpr es de tipo:

  • VACÍO

    El resultado es una cadena NULL.

  • valor numérico exacto

    El resultado es el número literal con un signo menos opcional y sin ceros a la izquierda del separador decimal. Si targetType es DECIMAL(p, s) con s mayor que 0, se agrega un separador decimal y se agregan ceros finales para escalar.

  • binario de punto flotante

    Si el número absoluto es menor que 10,000,000 y mayor o igual que 0.001, el resultado se expresa sin notación científica con al menos un dígito en cualquier lado del separador decimal.

    De lo contrario, Azure Databricks usa una mantisa seguida de E y de un exponente. La mantisa tiene un signo menos inicial opcional seguido de un dígito a la izquierda del separador decimal y el número mínimo de dígitos mayores que cero a la derecha. El exponente tiene un signo menos inicial opcional.

  • FECHA

    Si el año está comprendido entre 9999 BCE y 9999 CE, el resultado es una dateString de la forma -YYYY-MM-DD y YYYY-MM-DD, respectivamente.

    Durante años anteriores o posteriores a este intervalo, el número necesario de dígitos se agrega al componente de año y + se usa para CE.

  • TIMESTAMP

    Si el año está comprendido entre 9999 BCE y 9999 CE, el resultado es una timestampString de la forma -YYYY-MM-DD hh:mm:ss y YYYY-MM-DD hh:mm:ss, respectivamente.

    Durante años anteriores o posteriores a este intervalo, el número necesario de dígitos se agrega al componente de año y + se usa para CE.

    Las fracciones de segundo .f... se agregan si es necesario.

  • TIMESTAMP_NTZ

    Si el año está comprendido entre 9999 BCE y 9999 CE, el resultado es una timestampString de la forma -YYYY-MM-DD hh:mm:ss y YYYY-MM-DD hh:mm:ss, respectivamente.

    Durante años anteriores o posteriores a este intervalo, el número necesario de dígitos se agrega al componente de año y + se usa para CE.

    Las fracciones de segundo .f... se agregan si es necesario.

  • intervalo de año-mes

    El resultado es su representación más corta del literal de intervalo. Si el intervalo es negativo, el signo se inserta en interval-string. Para unidades menores de 10, se omiten los ceros iniciales.

    Una cadena de intervalo de mes y año típica tiene la forma:

    • INTERVAL 'Y' YEAR
    • INTERVAL 'Y-M' YEAR TO MONTH
    • INTERVAL 'M' MONTH
  • intervalo de tiempo de día

    El resultado es su representación más corta del literal de intervalo. Si el intervalo es negativo, el signo se inserta en interval-string. En el caso de las unidades menores que 10, se omiten los ceros iniciales.

    Una cadena de intervalo de tiempo de día típica tiene el formato:

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

    El resultado del booleano true es el literal STRINGtrue. Para false es el literal de cadena false. Para NULL es la cadena NULL.

  • BINARIO

    Un resultado es el sourceExpr binario interpretado como una secuencia de caracteres UTF-8.

    Azure Databricks no valida los caracteres UTF-8. Una conversión de BINARY a STRING nunca insertará caracteres de sustitución ni generará un error.

  • ARREGLO

    El resultado es una lista separada por comas de elementos de conversión, entre corchetes [ ]. Un espacio sigue cada coma. Un elemento NULL se traduce a un literal null.

    Azure Databricks no cita ni marca elementos individuales, que pueden contener corchetes o comas.

  • MAPA

    El resultado es una lista separada por comas de pares clave-valor de conversión entre llaves { }. Un espacio sigue cada coma. Los pares de clave-valor están separados entre ellos por ->. Un valor de asignación NULL se traduce a literal null.

    Azure Databricks no cita ni marca valores o claves individuales, que pueden contener llaves, comas o ->.

  • ESTRUCTURA

    El resultado es una lista separada por comas de valores de campo de conversión, entre llaves { }. Un espacio sigue cada coma. Un valor de campo NULL se traduce a un literal null.

    Azure Databricks no cita ni marca los valores de campo individuales, los cuales a su vez pueden contener llaves o comas.

  • VARIANTE

    Se aplican las reglas del tipo del valor real del tipo VARIANT.

Ejemplos

> 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

FECHA

Si targetType es un tipo de DATE y sourceExpr es de tipo:

  • VACÍO

    El resultado es un NULLDATE.

  • CUERDA

    sourceExpr debe ser una dateString válida.

    Si sourceExpr es un dateString no válido, Azure Databricks devuelve un error.

    Use try_cast para convertir errores de datos no válidos en NULL.

  • TIMESTAMP

    El resultado es la parte de fecha de la marca de tiempo sourceExpr.

  • TIMESTAMP_NTZ

    El resultado es la parte de la fecha de timestamp_ntz sourceExpr.

  • VARIANTE

    Se aplican las reglas de tipo para el valor real mantenido por el tipo de datos VARIANT.

Ejemplos

> 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

Si targetType es un tipo de TIMESTAMP y sourceExpr es de tipo:

  • VACÍO

    El resultado es un NULLDATE.

  • numérico

    sourceExpr se lee como el número de segundos desde 1970-01-01 00:00:00 UTC.

    Las fracciones más pequeñas que los microsegundos se truncan.

    Si el valor está fuera del intervalo de TIMESTAMP, se genera un error de desbordamiento.

    Use try_cast para convertir errores de desbordamiento en NULL.

  • CUERDA

    sourceExpr debe ser un elemento timestampString válido.

    Si sourceExpr es un timestampString no válido, Azure Databricks devuelve un error.

    Use try_cast para convertir errores de datos no válidos en NULL.

  • FECHA

    El resultado es el valor sourceExprDATE en 00:00:00 horas.

  • TIMESTAMP_NTZ

El resultado es un valor de marca de tiempo con los mismos campos year/month/day/hour/minute/second de timestamp_ntz sourceExpr.

  • VARIANTE

    Se aplican las reglas de tipo para el valor real mantenido por el tipo de datos VARIANT.

Ejemplos

> 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

Si targetType es un tipo de TIMESTAMP_NTZ y sourceExpr es de tipo:

  • VACÍO

    El resultado es un NULLDATE.

  • CUERDA

    sourceExpr debe ser un elemento timestampString válido.

    Si sourceExpr es un timestampString no válido, Azure Databricks devuelve un error.

    Use try_cast para convertir errores de datos no válidos en NULL.

  • FECHA

    El resultado es el valor sourceExpr DATE en 00:00:00 horas.

  • TIMESTAMP

    El resultado es la hora local como en sourceExpr la zona horaria de la sesión.

  • VARIANTE

    Se aplican las reglas de tipo para el valor real mantenido por el tipo de datos VARIANT.

Ejemplos

> 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

Intervalo de mes y año

Si targetType es un intervalo de año-mes y sourceExpr es de tipo:

Ejemplos

> 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

Intervalo de día y hora

Si targetType es un intervalo de día y hora y sourceExpr es de tipo:

  • VACÍO

    El resultado es un intervalo de NULL día-hora.

  • exact_numeric

    Se aplica a:casilla marcada como sí Databricks SQL casilla marcada como Sí Databricks Runtime 11.3 LTS y versiones posteriores

    El valor numérico se interpreta como número de unidades inferiores de targetTypedayTimeIntervalQualifier. Si la unidad es SECOND cualquier fracción se interpreta como fracciones de segundos.

  • CUERDA

    sourceExpr debe ser un valor dayTimeIntervalString válido.

    Si sourceExpr es un dayTimeIntervalString no válido, Azure Databricks devuelve un error.

    Use try_cast para convertir errores de datos no válidos en NULL.

  • intervalo de tiempo de día

    Si targetTypedayTimeIntervalQualifier incluye la unidad más pequeña del tipo de origen dayTimeIntervalQualifier, el valor permanece inalterado, pero se reinterpreta para que coincida con el tipo de destino.

    De lo contrario, el intervalo sourceExpr se trunca para ajustarse a targetType.

> 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

BOOLEANO

Si targetType es un valor BOOLEAN y sourceExpr es de tipo:

  • VACÍO

    El resultado es un valor NULL de tipo BOOLEAN.

  • numérico

    Si sourceExpr es:

    • 0: el resultado es false.

      De lo contrario, el resultado es true.

  • CUERDA

    Si sourcEexpr es (no distingue entre mayúsculas y minúsculas):

    • 'T', 'TRUE', 'Y', 'YES', or '1': el resultado es true
    • 'F', 'FALSE', 'N', 'NO', or '0': el resultado es false
    • NULL: el resultado es NULL

    De lo contrario, Azure Databricks devuelve una sintaxis de entrada no válida para el error de tipo booleano.

    Use try_cast para convertir errores de datos no válidos en NULL.

  • VARIANTE

    Se aplican las reglas del tipo del valor real del tipo VARIANT.

Ejemplos

> 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

BINARIO

Si targetType es un valor BINARY y sourceExpr es de tipo:

  • VACÍO

    El resultado es un valor NULL de tipo BINARY.

  • CUERDA

    El resultado es la codificación UTF-8 de surceExpr.

  • VARIANTE

    Se aplican las reglas de tipo para el valor real mantenido por el tipo de datos VARIANT.

Ejemplos

> 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

ARREGLO

Si targetType es un objeto ARRAY < targetElementType > y sourceExpr es de tipo:

  • VACÍO

    El resultado es un NULL del targeType.

  • ARRAY < sourceElementType >

    Si se admite la conversión de sourceElementType a targetElementType, el resultado es un elemento ARRAY<targetElementType> con todos los elementos convertidos en targetElementType.

    Azure Databricks genera un error si no se admite la conversión o si alguno de los elementos no se puede convertir.

    Use try_cast para convertir datos no válidos o errores de desbordamiento en NULL.

  • VARIANTE

    Se aplican las reglas de tipo para el valor real mantenido por el tipo de datos VARIANT.

Ejemplos

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

MAPA

Si targetType es un elemento MAP < targetKeyType, targetValueType > y sourceExpr es de tipo:

  • VACÍO

    El resultado es un NULL del targetType.

  • MAP <sourceKeyType, sourceValueType >

    Si se admiten las conversiones de sourceKeyType a targetKeyType y de sourceValueType a targetValueType, el resultado es un elemento MAP<targetKeyType, targetValueType> con todas las claves que se convierten en targetKeyType y todos los valores convertidos en targetValueType.

    Azure Databricks genera un error si no se admite la conversión o si no se puede convertir ninguna de las claves o valores.

    Use try_cast para convertir datos no válidos o errores de desbordamiento en NULL.

  • VARIANTE

    Se aplican las reglas de tipo para el valor real mantenido por el tipo de datos VARIANT.

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

    Cada sourceFieldName de tipo STRING se convierte en targetKeyType y se asigna a una clave de asignación. Cada valor de campo de origen de sourceFieldType se convierte en targetValueType y se asigna el valor de asignación correspondiente.

    Azure Databricks genera un error si no se admite ninguna conversión o si no se puede convertir alguno de los valores de campo o clave.

    Use try_cast para convertir datos no válidos o errores de desbordamiento en NULL.

Ejemplos

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

ESTRUCTURA

Si targetType es un valor STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, …]] > y sourceExpr es de tipo:

  • VACÍO

    El resultado es un NULL del targetType.

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

    El elemento sourceExpr se puede convertir a targetType si se cumplen todas estas condiciones:

    • El tipo de origen tiene el mismo número de campos que el destino.
    • Para todos los campos: sourceFieldTypeN se puede convertir en targetFieldTypeN.
    • Para todos los valores de campo: el valor de campo de origen N se puede convertir en targetFieldTypeN y el valor no es NULL si el campo de destino N está marcado como NOT NULL.

    Los valores sourceFieldName, las restricciones de NOT NULL de origen y los COMMENT de origen no tienen que coincidir con targetType y se omiten.

    Azure Databricks genera un error si no se admite la conversión o si alguno de los campos no se puede convertir.

    Use try_cast para convertir datos no válidos o errores de desbordamiento en NULL.

  • VARIANTE

    Se aplican las reglas de tipo para el valor real mantenido por el tipo de datos VARIANT.

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

    Todos los sourceFieldName coinciden con sourceFieldName. Cada valor de campo de origen de sourceFieldType se convierte en el targetValueType coincidente y se asigna al valor de asignación correspondiente.

    Si no coincide un targetFieldName, el valor del campo es NULL.

    Si un sourceFieldName no coincide, se omite el campo.

    Azure Databricks genera un error si no se admite ninguna conversión o si no se puede convertir alguno de los valores de campo o clave.

    Use try_cast para convertir datos no válidos o errores de desbordamiento en NULL.

Ejemplos

> 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

Si targetType es un valor VARIANT y sourceExpr es de tipo:

  • VACÍO

    El resultado es un valor NULL de tipo VARIANT.

  • numérico

    El resultado es un VARIANT, que representa el valor numérico. La precisión de los tipos DECIMAL debe ser <= 38.

    Todos los valores numéricos enteros se asignan a BIGINT.

    Todos los valores DECIMAL se asignan a su precisión y escala más estrechas.

  • CUERDA

    El resultado es un VARIANT, que representa el valor STRING.

  • FECHA

    El resultado es un VARIANT, que representa el valor DATE.

  • TIMESTAMP

    El resultado es un VARIANT, que representa el valor TIMESTAMP.

  • TIMESTAMP_NTZ

    El resultado es un VARIANT, que representa el valor TIMESTAMP NTZ.

  • BOOLEANO

    El resultado es un VARIANT, que representa el valor BOOLEAN.

  • BINARIO

    El resultado es un VARIANT, que representa el valor BINARY.

  • ARRAY < sourceElementType >

    Si se admite la conversión de sourceElementType a VARIANT, el resultado es VARIANT, que representa ARRAY<sourceElementType>.

    Azure Databricks genera un error si no se admite la conversión.

    Use try_cast para convertir datos no válidos o errores de desbordamiento en NULL.

Ejemplos

> SELECT cast(NULL AS VARIANT);
  NULL

> SELECT cast(5.1000 AS VARIANT);
  5.1

> SELECT schema_of_variant(cast(5 AS VARIANT));
  BIGINT