Función cast
Se aplica a: Databricks SQL 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:
-
El resultado es un valor
NULL
del tipo numérico especificado. -
Si
targetType
es un valor numérico integral, el resultado sesourceExpr
trunca para convertirse en un número entero.De lo contrario, el resultado se
sourceExpr
redondea a un ajuste de la escala disponible detargetType
.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
. -
sourceExpr
se lee como un valor literal detargetType
.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
. -
El resultado es el número de segundos transcurridos entre
1970-01-01 00:00:00 UTC
ysourceExpr
.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
. -
Se aplica a: Databricks SQL 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 delower_unit
. Silower_unit
esSECOND
, 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. -
Si
sourceExpr
es:true
: el resultado es 1.false
: el resultado es 0.NULL
: el resultado esNULL
.
-
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:
-
El resultado es una cadena
NULL
. -
El resultado es el número literal con un signo menos opcional y sin ceros a la izquierda del separador decimal. Si
targetType
esDECIMAL(p, s)
cons
mayor que 0, se agrega un separador decimal y se agregan ceros finales para escalar. -
Si el número absoluto es menor que
10,000,000
y mayor o igual que0.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. -
Si el año está comprendido entre 9999 BCE y 9999 CE, el resultado es una dateString de la forma
-YYYY-MM-DD
yYYYY-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. -
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
yYYYY-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. -
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
yYYYY-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. -
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
-
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
-
El resultado del booleano
true
es el literalSTRING
true
. Parafalse
es el literal de cadenafalse
. ParaNULL
es la cadena NULL. -
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
aSTRING
nunca insertará caracteres de sustitución ni generará un error. -
El resultado es una lista separada por comas de elementos de conversión, entre corchetes
[ ]
. Un espacio sigue cada coma. Un elementoNULL
se traduce a un literalnull
.Azure Databricks no cita ni marca elementos individuales, que pueden contener corchetes o comas.
-
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ónNULL
se traduce a literalnull
.Azure Databricks no cita ni marca valores o claves individuales, que pueden contener llaves, comas o
->
. -
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 campoNULL
se traduce a un literalnull
.Azure Databricks no cita ni marca valores de campo individuales, que pueden contener llaves o comas.
-
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:
-
El resultado es un
NULL
DATE
. -
sourceExpr
debe ser una dateString válida.Si
sourceExpr
es undateString
no válido, Azure Databricks devuelve un error.Use try_cast para convertir errores de datos no válidos en
NULL
. -
El resultado es la parte de fecha de la marca de tiempo
sourceExpr
. -
El resultado es la parte de la fecha de timestamp_ntz
sourceExpr
. -
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:
-
El resultado es un
NULL
DATE
. -
sourceExpr
se lee como el número de segundos desde1970-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
. -
sourceExpr
debe ser un elemento timestampString válido.Si
sourceExpr
es untimestampString
no válido, Azure Databricks devuelve un error.Use try_cast para convertir errores de datos no válidos en
NULL
. -
El resultado es el valor
sourceExpr
DATE
en00:00:00
horas.
El resultado es un valor de marca de tiempo con los mismos campos year/month/day/hour/minute/second de timestamp_ntz sourceExpr
.
-
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:
-
El resultado es un
NULL
DATE
. -
sourceExpr
debe ser un elemento timestampString válido.Si
sourceExpr
es untimestampString
no válido, Azure Databricks devuelve un error.Use try_cast para convertir errores de datos no válidos en
NULL
. -
El resultado es el valor
sourceExpr
DATE en00:00:00
horas. -
El resultado es la hora local como en
sourceExpr
la zona horaria de la sesión. -
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:
-
El resultado es un intervalo de
NULL
año-mes. -
Se aplica a: Databricks SQL Databricks Runtime 11.3 LTS y versiones posteriores
El valor numérico se interpreta como el número de unidades inferiores de
targetType
yearmonthIntervalQualifier. -
sourceExpr
debe ser un valor yearMonthIntervalString válido.Si
sourceExpr
es unyearMonthIntervalString
no válido, Azure Databricks devuelve un error.Use try_cast para convertir errores de datos no válidos en
NULL
. -
Si
targetType
yearMonthIntervalQualifier incluyeMONTH
, 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:
-
El resultado es un intervalo de
NULL
día-hora. -
Se aplica a: Databricks SQL 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 esSECOND
cualquier fracción se interpreta como fracciones de segundos. -
sourceExpr
debe ser un valor dayTimeIntervalString válido.Si
sourceExpr
es undayTimeIntervalString
no válido, Azure Databricks devuelve un error.Use try_cast para convertir errores de datos no válidos en
NULL
. -
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 atargetType
.
> 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:
-
El resultado es un valor
NULL
de tipoBOOLEAN
. -
Si
sourceExpr
es:0
: el resultado esfalse
.NULL
: el resultado esNULL
.special floating point value
: el resultado estrue
.
De lo contrario, el resultado es
true
.
-
Si
sourcEexpr
es (no distingue entre mayúsculas y minúsculas):'T', 'TRUE', 'Y', 'YES', or '1'
: el resultado estrue
'F', 'FALSE', 'N', 'NO', or '0'
: el resultado esfalse
NULL
: el resultado esNULL
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
. -
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:
-
El resultado es un valor
NULL
de tipoBINARY
. -
El resultado es la codificación UTF-8 de
surceExpr
. -
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:
-
El resultado es un
NULL
deltargeType
. -
Si se admite la conversión de
sourceElementType
atargetElementType
, el resultado es un elementoARRAY<targetElementType>
con todos los elementos convertidos entargetElementType
.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
. -
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:
-
El resultado es un
NULL
deltargetType
. MAP <sourceKeyType, sourceValueType >
Si se admiten las conversiones de
sourceKeyType
atargetKeyType
y desourceValueType
atargetValueType
, el resultado es un elementoMAP<targetKeyType, targetValueType>
con todas las claves que se convierten entargetKeyType
y todos los valores convertidos entargetValueType
.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
.-
Se aplican las reglas de tipo para el valor real mantenido por el tipo de datos
VARIANT
. OBJECT < [sourceFieldName : sourceFieldType [, …]] >
Cada
sourceFieldName
de tipoSTRING
se convierte entargetKeyType
y se asigna a una clave de asignación. Cada valor de campo de origen desourceFieldType
se convierte entargetValueType
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:
-
El resultado es un
NULL
deltargetType
. STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, …]] >
El elemento
sourceExpr
se puede convertir atargetType
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 entargetFieldTypeN
. - 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 comoNOT NULL
.
Los valores
sourceFieldName
, las restricciones deNOT NULL
de origen y losCOMMENT
de origen no tienen que coincidir contargetType
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
.-
Se aplican las reglas de tipo para el valor real mantenido por el tipo de datos
VARIANT
. OBJECT < [sourceFieldName : sourceFieldType [, …]] >
Todos los
sourceFieldName
coinciden consourceFieldName
. Cada valor de campo de origen desourceFieldType
se convierte en eltargetValueType
coincidente y se asigna al valor de asignación correspondiente.Si no coincide un
targetFieldName
, el valor del campo esNULL
.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:
-
El resultado es un valor
NULL
de tipoVARIANT
. -
El resultado es un
VARIANT
, que representa el valor numérico. La precisión de los tiposDECIMAL
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. -
El resultado es un
VARIANT
, que representa el valorSTRING
. -
El resultado es un
VARIANT
, que representa el valorDATE
. -
El resultado es un
VARIANT
, que representa el valorTIMESTAMP
. -
El resultado es un
VARIANT
, que representa el valorTIMESTAMP NTZ
. -
El resultado es un
VARIANT
, que representa el valorBOOLEAN
. -
El resultado es un
VARIANT
, que representa el valorBINARY
. -
Si se admite la conversión de
sourceElementType
aVARIANT
, el resultado esVARIANT
, que representaARRAY<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