Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Função
Aplica-se a:
Databricks SQL
Databricks Runtime
Converte o valor expr para o tipo typede dados de destino. Este operador é sinónimo de :: operador (sinal de dois pontos)
Sintaxe
cast(sourceExpr AS targetType)
Argumentos
-
sourceExpr: Qualquer expressão convertível. -
targetType: O tipo de dados do resultado.
Devoluções
O resultado é o tipo targetType.
As seguintes combinações de conversão de tipos de dados são válidas:
| Origem (linha) Destino (coluna) | VAZIO | numérico | STRING | DATA | Carimbo de data e hora | TIMESTAMP_NTZ | intervalo ano-mês | intervalo diurno | BOOLEANO | BINÁRIO | MATRIZ | MAPA | ESTRUTURA | VARIANTE | OBJETO |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| VAZIO | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N |
| numérico | N | Y | Y | N | Y | N | Y | Y | Y | N | N | N | N | Y | N |
| STRING | N | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | N | Y | N |
| DATA | N | N | Y | Y | Y | Y | N | N | N | N | N | N | N | Y | N |
| Carimbo de data e hora | N | Y | Y | Y | Y | Y | N | N | N | N | N | N | N | Y | N |
| TIMESTAMP_NTZ | N | N | Y | Y | Y | Y | N | N | N | N | N | N | N | Y | N |
| intervalo ano-mês | N | Y | Y | N | N | N | Y | N | N | N | N | N | N | N | N |
| intervalo diurno | N | Y | Y | N | N | N | N | Y | N | N | N | N | N | N | N |
| BOOLEANO | N | Y | Y | N | Y | N | N | N | Y | N | N | N | N | Y | N |
| BINÁRIO | N | Y | Y | N | N | N | N | N | N | Y | N | N | N | Y | N |
| MATRIZ | N | N | Y | N | N | N | N | N | N | N | Y | N | N | Y | N |
| MAPA | N | N | Y | N | N | N | N | N | N | N | N | Y | N | N | N |
| ESTRUTURA | N | N | Y | N | N | N | N | N | N | N | N | N | Y | N | N |
| VARIANTE | N | Y | Y | Y | Y | Y | N | N | Y | Y | Y | Y | Y | Y | N |
| OBJETO | N | N | N | N | N | N | N | N | N | N | N | Y | Y | N | N |
Condições de erro comuns
Regras e limitações baseadas em targetType
Aviso
No Databricks Runtime, se spark.sql.ansi.enabled estiver definido como false verdadeiro, um overflow não causará um erro, mas envolverá o resultado.
Um sourceExpr valor com um formato inválido ou caracteres inválidos para targetType resultará em um NULL.
numérico
Se o targetType é numérico e sourceExpr é do tipo:
-
O resultado é um
NULLdo tipo numérico especificado. -
Se
targetTypefor um número integral, o resultado ésourceExprtruncado para se tornar um número inteiro.Caso contrário, o resultado é
sourceExprarredondado para ajustar à escala disponível detargetType.Se o valor estiver fora do intervalo de
targetType, Azure Databricks aumenta CAST_OVERFLOW.Use try_cast para converter erros de estouro em
NULL. -
sourceExpré lido como um valor literal dotargetType.Se
sourceExprnão cumprir o formato para valores literais, Azure Databricks aumenta CAST_INVALID_INPUT.Se o valor estiver fora do intervalo do
targetType, Azure Databricks aumenta CAST_OVERFLOW.Use try_cast para transformar erros de formato inválidos e de estouro em
NULL. -
O resultado é o número de segundos decorridos entre
1970-01-01 00:00:00 UTCesourceExpr.Se
targetTypefor um número numérico integral, o resultado é truncado para um número inteiro.Caso contrário, o resultado é arredondado para se ajustar à escala disponível de
targetType.Se o resultado estiver fora do intervalo de
targetType, Azure Databricks aumenta CAST_OVERFLOW.Use try_cast para converter erros de estouro em
NULL. -
Aplica-se a:
Databricks SQL
Databricks Runtime 11.3 LTS e superiorO tipo de destino deve ser um número exato.
Dado um
INTERVAL upper_unit TO lower_unit, o resultado é medido em número total delower_unit. Se forlower_unitSECOND, os segundos fracionários são armazenados à direita da vírgula decimal. Para todos os outros intervalos, o resultado é sempre um número integral. -
Se
sourceExpré:-
true: O resultado é 1. -
false: O resultado é 0. -
NULL: O resultado éNULL.
-
-
Aplicam-se as regras do tipo do valor efetivo do tipo
VARIANT.
Exemplos
> 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);
Error: CAST_OVERFLOW
> SELECT cast(128 AS DECIMAL(2, 0));
Error: CAST_OVERFLOW
> SELECT cast('123' AS INT);
123
> SELECT cast('123.0' AS INT);
Error: CAST_INVALID_INPUT
> 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: CAST_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
cadeia de caracteres
Se o sourceExpr for um STRING, o STRING resultante herda a ordenação de sourceExpr.
Em todos os outros casos, o agrupamento resultante STRING é, por padrão, o agrupamento .
Para alterar a ordenação, adicione a expressão collate.
Se o targetType é um STRING tipo e sourceExpr é do tipo:
-
O resultado é uma
NULLcadeia de caracteres. -
O resultado é o número literal com um sinal de menos opcional e sem zeros à esquerda, com exceção do único dígito à esquerda da vírgula decimal. Se o
targetTypeforDECIMAL(p, s)comsmaior que 0, um ponto decimal é adicionado e zeros à direita são adicionados até atingir a escala. -
Se o número absoluto for menor que
10,000,000e maior ou igual a0.001, o resultado é expresso sem notação científica, com pelo menos um algarismo de cada lado do ponto decimal.Caso contrário, Azure Databricks usa uma mantissa seguida de
Ee um expoente. A mantissa tem um sinal de menos opcional à frente, seguido por um dígito à esquerda da vírgula decimal e pelo menor número possível de dígitos, maior que zero, à direita. O expoente tem um sinal de menos opcional à esquerda. -
Se o ano estiver entre 9999 a.C. e 9999 d.C., o resultado será uma dateString do formulário
-YYYY-MM-DDeYYYY-MM-DDrespectivamente.Para anos anteriores ou posteriores a este intervalo, o número necessário de algarismos é adicionado ao componente ano e
+é utilizado para CE. -
Se o ano estiver entre 9999 a.C. e 9999 d.C., o resultado será um timestampString do formulário
-YYYY-MM-DD hh:mm:sseYYYY-MM-DD hh:mm:ssrespectivamente.Para anos anteriores ou posteriores a este intervalo, o número necessário de algarismos é adicionado ao componente ano e
+é utilizado para CE.Se necessário, são adicionados segundos
.f...fracionários. -
Se o ano estiver entre 9999 a.C. e 9999 d.C., o resultado será um timestampString do formulário
-YYYY-MM-DD hh:mm:sseYYYY-MM-DD hh:mm:ssrespectivamente.Para anos anteriores ou posteriores a este intervalo, o número necessário de algarismos é adicionado ao componente ano e
+é utilizado para CE.Se necessário, são adicionados segundos
.f...fracionários. -
O resultado é a sua representação mais curta do intervalo literal. Se o intervalo for negativo, o sinal será incorporado no
interval-string. Para unidades menores que 10, zeros à esquerda são omitidos.Uma cadeia de caracteres típica de intervalo ano-mês tem a forma:
INTERVAL 'Y' YEARINTERVAL 'Y-M' YEAR TO MONTHINTERVAL 'M' MONTH
-
O resultado é a sua representação mais curta do intervalo literal. Se o intervalo for negativo, o sinal será incorporado no
interval-string. Para unidades menores que 10, os zeros que antecedem são omitidos.Uma cadeia de caracteres típica de um intervalo de tempo durante o dia tem a forma:
INTERVAL 'D' DAYINTERVAL 'D h' DAY TO HOURINTERVAL 'D h:m' DAY TO MINUTEINTERVAL 'D h:m:s' DAY TO SECONDINTERVAL 'h' HOURINTERVAL 'h:m' HOUR TO MINUTEINTERVAL 'm:s' MINUTE TO SECONDINTERVAL 's' SECOND
-
O resultado do
truebooleano é oSTRINGliteraltrue. Parafalseé o literal STRINGfalse. ParaNULLé a cadeia de caracteres NULL. -
Um resultado é o binário
sourceExprinterpretado como uma sequência de caracteres UTF-8.O Azure Databricks não valida os caracteres UTF-8. Uma conversão de
BINARYparaSTRINGnunca injetará caracteres de substituição nem gerará um erro. -
O resultado é uma lista separada por vírgulas de elementos, que está entre colchetes
[ ]. Um espaço segue cada vírgula. UmNULLelemento é traduzido para um literalnull.O Azure Databricks não cita nem marca elementos individuais, que podem conter parênteses ou vírgulas.
-
O resultado é uma lista separada por vírgulas de pares de chave-valor de tipo, que é delimitada por chaves
{ }. Um espaço segue cada vírgula. Cada par de valores de chave é separado por um->. UmNULLvalor de mapa é traduzido para literalnull.Azure Databricks não cita nem marca de outra forma chaves ou valores individuais, que podem conter colchetes enrolados, vírgulas ou
->. -
O resultado é uma lista separada por vírgulas de valores de campo convertidos, que está entre chaves
{ }. Um espaço segue cada vírgula. UmNULLvalor de campo é traduzido para um literalnull.O Azure Databricks não cita nem marca valores individuais dos campos, que podem conter colchetes ou vírgulas.
-
Aplicam-se as regras do tipo do valor efetivo do tipo
VARIANT.
Exemplos
> 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
DATA
Se o targetType é um DATE tipo e sourceExpr é do tipo:
-
O resultado é um arquivo
NULLDATE. -
sourceExprdeve ser um dateString válido.Se
sourceExprnão for umdateStringválido, Azure Databricks aumenta CAST_INVALID_INPUT.Use try_cast para transformar erros de dados inválidos em
NULL. -
O resultado é a parte de data do carimbo de data/hora
sourceExpr. -
O resultado é a parte de data do timestamp_ntz
sourceExpr. -
Aplicam-se as regras de tipo para o valor real mantido pelo
VARIANTtipo de dados.
Exemplos
> 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: CAST_INVALID_INPUT
> 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
MARCA TEMPORAL
Se o targetType é um TIMESTAMP tipo e sourceExpr é do tipo:
-
O resultado é um arquivo
NULLDATE. -
sourceExpré lido como o número de segundos desde1970-01-01 00:00:00 UTC.Frações menores que microssegundos são truncadas.
Se o valor estiver fora do intervalo de
TIMESTAMP, Azure Databricks aumenta CAST_OVERFLOW.Use try_cast para converter erros de estouro em
NULL. -
sourceExprdeve ser um timestampString válido.Se
sourceExprnão for umtimestampStringválido, Azure Databricks aumenta CAST_INVALID_INPUT.Use try_cast para transformar erros de dados inválidos em
NULL. -
O resultado é o
sourceExprDATEàs00:00:00h.
O resultado é um valor de timestamp com os mesmos campos de ano/mês/dia/hora/minuto/segundo de timestamp_ntz sourceExpr.
-
Aplicam-se as regras de tipo para o valor real mantido pelo
VARIANTtipo de dados.
Exemplos
> 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: CAST_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: CAST_INVALID_INPUT
> 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
Se o targetType é um TIMESTAMP_NTZ tipo e sourceExpr é do tipo:
-
O resultado é um arquivo
NULLDATE. -
sourceExprdeve ser um timestampString válido.Se
sourceExprnão for umtimestampStringválido, Azure Databricks aumenta CAST_INVALID_INPUT.Use try_cast para transformar erros de dados inválidos em
NULL. -
O resultado é a
sourceExprDATA às00:00:00horas. -
O resultado é a hora local dentro do fuso
sourceExprhorário da sessão. -
Aplicam-se as regras de tipo para o valor real mantido pelo
VARIANTtipo de dados.
Exemplos
> 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: CAST_INVALID_INPUT
> 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 ano-mês
Se o targetType for um intervalo de um ano e mês e sourceExpr for do tipo:
-
O resultado é um intervalo ano-mês
NULL. -
Aplica-se a:
Databricks SQL
Databricks Runtime 11.3 LTS e superiorO valor numérico é interpretado como o número de unidades menores do
targetTypeanomêsIntervalQualifier. -
sourceExprdeve ser um yearMonthIntervalString válido.Se
sourceExprnão for umyearMonthIntervalStringválido, Azure Databricks aumenta CAST_INVALID_INPUT.Use try_cast para transformar erros de dados inválidos em
NULL. -
Se o
targetTypeyearMonthIntervalQualifier incluirMONTHo valor permanecerá inalterado, mas será reinterpretado para corresponder ao tipo de destino.Caso contrário, se o tipo de origem yearMonthIntervalQualifier incluir
MONTH, o resultado será truncado para anos completos.
Exemplos
> 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: CAST_INVALID_INPUT
> 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 diurno
**
Se o targetType for um intervalo diurno e sourceExpr for do tipo:
-
O resultado é um
NULLintervalo de tempo diurno. -
Aplica-se a:
Databricks SQL
Databricks Runtime 11.3 LTS e superiorO numérico é interpretado como o número de unidades inferiores do
targetTypedayTimeIntervalQualifier. Se a unidade forSECOND, quaisquer frações são interpretadas como segundos fracionários. -
sourceExprdeve ser um dayTimeIntervalString válido.Se
sourceExprnão for umdayTimeIntervalStringválido, Azure Databricks aumenta CAST_INVALID_INPUT.Use try_cast para transformar erros de dados inválidos em
NULL. -
Se o
targetTypedayTimeIntervalQualifier incluir a menor unidade do tipo de origem dayTimeIntervalQualifier, o valor permanecerá inalterado, mas será reinterpretado para corresponder ao tipo de destino.Caso contrário, o
sourceExprintervalo é truncado para se ajustar aotargetType.
> 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: CAST_INVALID_INPUT
> 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
Se o targetType é um BOOLEANO e sourceExpr é do tipo:
-
O resultado é um
NULLdo tipoBOOLEAN. -
Se
sourceExpré:0: O resultado éfalse.-
NULL: O resultado éNULL. -
special floating point value: O resultado étrue.
Caso contrário, o resultado é
true.-
-
Se
sourcEexprfor (sem distinção entre maiúsculas e minúsculas):-
'T', 'TRUE', 'Y', 'YES', or '1': O resultado étrue -
'F', 'FALSE', 'N', 'NO', or '0': O resultado éfalse -
NULL: O resultado éNULL
Caso contrário, Azure Databricks aumenta CAST_INVALID_INPUT.
Use try_cast para transformar erros de dados inválidos em
NULL. -
-
Aplicam-se as regras do tipo do valor efetivo do tipo
VARIANT.
Exemplos
> 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: CAST_INVALID_INPUT
> 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
BINÁRIO
Se o targetType é um BINÁRIO e sourceExpr é do tipo:
-
O resultado é um
NULLdo tipoBINARY. -
O resultado é a codificação UTF-8 do
surceExpr. -
Aplicam-se as regras de tipo para o valor real mantido pelo
VARIANTtipo de dados.
Exemplos
> 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
MATRIZ
Se o targetType é um ARRAY < targetElementType > e sourceExpr é do tipo:
-
O resultado é um
NULLdostargeType. -
Se a conversão de
sourceElementTypeparatargetElementTypefor suportada, o resultado será umARRAY<targetElementType>com todos os elementos convertidos para otargetElementType.O Azure Databricks gera um erro se o cast não for suportado ou se algum dos elementos não puder ser cast.
Use try_cast para transformar dados inválidos ou erros de estouro em
NULL. -
Aplicam-se as regras de tipo para o valor real mantido pelo
VARIANTtipo de dados.
Exemplos
> 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: DATATYPE_MISMATCH
> SELECT cast(array('t', 'f', 'o') AS ARRAY<BOOLEAN>);
Error: CAST_INVALID_INPUT
> SELECT cast(array('t', 'f', NULL)::VARIANT AS ARRAY<BOOLEAN>);
[true, false, NULL]
MAPA
Se o targetType é um MAP < targetKeyType, targetValueType > e sourceExpr é do tipo:
-
O resultado é um
NULLdostargetType. <MAP sourceKeyType, sourceValueType>
Se as conversões de
sourceKeyTypeparatargetKeyTypeesourceValueTypeparatargetValueTypeforem suportadas, o resultado será umMAP<targetKeyType, targetValueType>com todas as chaves convertidas para otargetKeyTypee todos os valores convertidos para otargetValueType.O Azure Databricks gera um erro se o cast não for suportado ou se alguma das chaves ou valores não puder ser cast.
Use try_cast para transformar dados inválidos ou erros de estouro em
NULL.-
Aplicam-se as regras de tipo para o valor real mantido pelo
VARIANTtipo de dados. OBJECT < [sourceFieldName : sourceFieldType [, ...]] >
Cada
sourceFieldNamedo tipoSTRINGé convertido emtargetKeyTypee mapeado para uma chave de mapa. Cada valor de campo de origem desourceFieldTypeé convertido e mapeado para o respetivo valor detargetValueTypemapa.O Azure Databricks gera um erro se nenhum cast for suportado ou se algum dos valores de campo ou de chave não puder ser castado.
Use try_cast para transformar dados inválidos ou erros de estouro em
NULL.
Exemplos
> 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: DATATYPE_MISMATCH
> SELECT cast(map('10', 't', '15', 'f', '20', 'o') AS MAP<INT, BOOLEAN>);
Error: CAST_INVALID_INPUT
-- 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}
ESTRUTURA
Se o targetType é um STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, ...]] > e sourceExpr é do tipo:
-
O resultado é um
NULLdostargetType. STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
O
sourceExprpode ser lançado paratargetTypese todas estas condições forem verdadeiras:- O tipo de origem tem o mesmo número de campos que o destino
- Para todos os campos:
sourceFieldTypeNpode ser convertido para otargetFieldTypeN. - Para todos os valores de campo: O valor do campo de origem N pode ser convertido para
targetFieldTypeNe o valor não é nulo se o campo de destino N estiver marcado comoNOT NULL.
sourceFieldNames, restrições de origemNOT NULLe fonteCOMMENTs não precisam corresponder aotargetTypee são ignorados.O Azure Databricks gera um erro se o cast não for suportado ou se algum dos campos não puder ser cast.
Use try_cast para transformar dados inválidos ou erros de estouro em
NULL.-
Aplicam-se as regras de tipo para o valor real mantido pelo
VARIANTtipo de dados. OBJECT < [sourceFieldName : sourceFieldType [, ...]] >
Todos os
sourceFieldNames são emparelhados comsourceFieldNames. Cada valor do campo de origem desourceFieldTypeé transformado para combinar comtargetValueTypee mapeado para o respetivo valor no mapa.Se a
targetFieldNamenão tiver correspondência, o valor do campo éNULL.Se a
sourceFieldNamenão for compatível, o campo será ignorado.O Azure Databricks gera um erro se nenhum cast for suportado ou se algum dos valores de campo ou de chave não puder ser castado.
Use try_cast para transformar dados inválidos ou erros de estouro em
NULL.
Exemplos
> 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: DATATYPE_MISMATCH
> SELECT cast(named_struct('a', 't', 'b', '1900') AS STRUCT<b:BOOLEAN, c:ARRAY<INT>>);
Error: DATATYPE_MISMATCH
> SELECT cast(named_struct('a', 't', 'b', 'hello') AS STRUCT<b:BOOLEAN, c:DATE>);
Error: CAST_INVALID_INPUT
> 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
Se o targetType é uma VARIANTE e sourceExpr é do tipo:
-
O resultado é um
NULLdo tipoVARIANT. -
O resultado é um
VARIANT, representando o valor numérico. A precisão dosDECIMALtipos deve ser <= 38.Todos os números integrais são mapeados para
BIGINT.Todos os valores
DECIMALsão mapeados com sua precisão e escala mais estreitas. -
O resultado é um
VARIANT, representando oSTRINGvalor. -
O resultado é um
VARIANT, representando oDATEvalor. -
O resultado é um
VARIANT, representando oTIMESTAMPvalor. -
O resultado é um
VARIANT, representando oTIMESTAMP NTZvalor. -
O resultado é um
VARIANT, representando oBOOLEANvalor. -
O resultado é um
VARIANT, representando oBINARYvalor. -
Se a conversão de
sourceElementTypeparaVARIANTfor suportada, o resultado seráVARIANT, representandoARRAY<sourceElementType>.O Azure Databricks gera um erro se o cast não for suportado.
-
Esta conversão não é diretamente suportada, uma vez que
VARIANTnão consegue preservar a ordem dos campos de struct. Use to_variant_object para converter oSTRUCTemVARIANTcomo umOBJECT. -
Esta conversão não é suportada diretamente, pois
VARIANTnão pode preservar o tipoMAP. Use to_variant_object para converter oMAPemVARIANTcomo umOBJECT. As chaves de mapa devem ser strings.O Azure Databricks gera um erro se o cast não for suportado.
Use try_cast para transformar dados inválidos ou erros de estouro em
NULL.
Exemplos
> SELECT cast(NULL AS VARIANT);
NULL
> SELECT cast(5.1000 AS VARIANT);
5.1
> SELECT schema_of_variant(cast(5 AS VARIANT));
BIGINT