Compartir vía


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 sinónimo del operador :: (signo de dos puntos doble)

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) VOID numeric STRING DATE TIMESTAMP TIMESTAMP_NTZ year-month interval day-time interval BOOLEAN BINARY ARRAY MAP STRUCT VARIANT OBJECT
VOID Y Y Y Y Y Y Y Y Y Y Y Y Y Y No
numeric N Y Y N Y N Y Y Y N N N N Y No
STRING N Y Y Y Y Y Y Y Y Y N N N Y No
DATE N N Y Y Y Y N N N N N N N Y No
TIMESTAMP N Y Y Y Y Y N N N N N N N Y No
TIMESTAMP_NTZ N N Y Y Y Y N N N N N N N Y No
year-month interval N Y Y N N N Y N N N N N N N N
day-time interval N Y Y N N N N Y N N N N N N N
BOOLEAN N Y Y N Y N N N Y N N N N Y No
BINARY N Y Y N N N N N N Y N N N Y No
ARRAY N N Y N N N N N N N Y N N Y No
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 Y Y Y Y Y N N Y Y Y Y Y Y No
OBJECT N N N N N N N N N N N Y Y N N

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:

  • VOID

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

  • numeric

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

    De lo contrario, el resultado se sourceExpr redondea 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.

  • STRING

    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.

  • INTERVAL

    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.

  • BOOLEAN

    Si sourceExpr es:

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

    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

STRING

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

  • VOID

    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.

  • DATE

    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.

  • year-month interval

    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
  • day-time interval

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

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

  • BINARY

    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.

  • ARRAY

    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.

  • MAP

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

  • STRUCT

    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 valores de campo individuales, que pueden contener llaves o comas.

  • VARIANT

    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

DATE

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

  • VOID

    El resultado es un NULL DATE.

  • STRING

    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.

  • VARIANT

    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 TIMESTAMP y sourceExpr es de tipo:

  • VOID

    El resultado es un NULL DATE.

  • numeric

    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.

  • STRING

    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_NTZ

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

  • VARIANT

    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 TIMESTAMP y sourceExpr es del tipo:

  • VOID

    El resultado es un NULL DATE.

  • STRING

    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.

  • DATE

    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.

  • VARIANT

    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:

  • VOID

    El resultado es un intervalo de NULL año-mes.

  • integral_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 el número de unidades inferiores de targetType yearmonthIntervalQualifier.

  • STRING

    sourceExpr debe ser un valor yearMonthIntervalString válido.

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

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

  • year-month interval

    Si targetType yearMonthIntervalQualifier incluye MONTH, el valor permanece inalterado, pero se reinterpreta para que coincida con el tipo de destino.

    De lo contrario, si el tipo de origen yearMonthIntervalQualifier incluye MONTH, el resultado se trunca a años completos.

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:

  • VOID

    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 targetType dayTimeIntervalQualifier. Si la unidad es SECOND cualquier fracción se interpreta como fracciones de segundos.

  • STRING

    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.

  • day-time interval

    Si targetType dayTimeIntervalQualifier 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

BOOLEAN

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

  • VOID

    El resultado es un valor NULL de tipo BOOLEAN.

  • numeric

    Si sourceExpr es:

    • 0: el resultado es false.

      De lo contrario, el resultado es true.

  • STRING

    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.

  • VARIANT

    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

BINARY

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

  • VOID

    El resultado es un valor NULL de tipo BINARY.

  • STRING

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

  • VARIANT

    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

ARRAY

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

  • VOID

    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.

  • VARIANT

    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]

MAP

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

  • VOID

    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 alguna de las claves o valores no se puede convertir.

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

  • VARIANT

    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}

STRUCT

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

  • VOID

    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.

  • VARIANT

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

VARIANT

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

  • VOID

    El resultado es un valor NULL de tipo VARIANT.

  • numeric

    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.

  • STRING

    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.

  • BOOLEAN

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

  • BINARY

    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