Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Função
Aplica-se a: SQL do Databricks
Databricks Runtime
Converte o valor expr
no tipo de dados de destino type
. Este operador é um sinônimo para ::
o operador (sinal de dois-pontos)
Sintaxe
cast(sourceExpr AS targetType)
Argumentos
-
sourceExpr
: qualquer expressão que possa ser convertida. -
targetType
: o tipo de dados do resultado.
Retornos
O resultado é o tipo targetType
.
As seguintes combinações de conversão de tipo de dados são válidas:
Origem (linha) Destino(coluna) | VAZIO | numérico | CORDA | DATA | TIMESTAMP | TIMESTAMP_NTZ | intervalo de ano-mês | intervalo de dia-tempo | BOOLIANO | BINÁRIO | ARRAY | MAPA | ESTRUTURA | variant | de OBJETO |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
VAZIO | S | S | S | S | S | S | S | S | S | S | S | S | S | S | N |
numérico | N | S | S | N | S | N | S | S | S | N | N | N | N | S | N |
CORDA | N | S | S | S | S | S | S | S | S | S | N | N | N | S | N |
DATA | N | N | S | S | S | S | N | N | N | N | N | N | N | S | N |
TIMESTAMP | N | S | S | S | S | S | N | N | N | N | N | N | N | S | N |
TIMESTAMP_NTZ | N | N | S | S | S | S | N | N | N | N | N | N | N | S | N |
intervalo de ano-mês | N | S | S | N | N | N | S | N | N | N | N | N | N | N | N |
intervalo de dia-tempo | N | S | S | N | N | N | N | S | N | N | N | N | N | N | N |
BOOLIANO | N | S | S | N | S | N | N | N | S | N | N | N | N | S | N |
BINÁRIO | N | S | S | N | N | N | N | N | N | S | N | N | N | S | N |
ARRAY | N | N | S | N | N | N | N | N | N | N | S | N | N | S | N |
MAPA | N | N | S | N | N | N | N | N | N | N | N | S | N | N | N |
ESTRUTURA | N | N | S | N | N | N | N | N | N | N | N | N | S | N | N |
variant | N | S | S | S | S | S | N | N | S | S | S | S | S | S | N |
de OBJETO | N | N | N | N | N | N | N | N | N | N | N | S | S | N | N |
Regras e limitações com base em targetType
Aviso
No Databricks Runtime, se spark.sql.ansi.enabled for false
, um estouro não causará um erro, mas "encapsulará" o resultado.
Um valor sourceExpr
com um formato inválido ou caracteres inválidos para targetType
resultará em um NULL
.
numérico
Se o targetType
for um numérico e sourceExpr
for do tipo:
-
O resultado é um
NULL
do tipo numérico especificado. -
Se
targetType
for um numérico integral, o resultado ésourceExpr
truncado para um número inteiro.Caso contrário, o resultado será
sourceExpr
arredondado para uma escala detargetType
disponível.Se o valor estiver fora do intervalo de
targetType
, um erro de estouro é gerado.Use try_cast para transformar erros de estouro em
NULL
. -
sourceExpr
é lido como um valor literal dotargetType
.Se
sourceExpr
não estiver em conformidade com o formato de valores literais, um erro será gerado.Se o valor estiver fora do intervalo do
targetType
, um erro de estouro é gerado.Use try_cast para transformar erros de estouro e formato inválidos em
NULL
. -
O resultado é o número de segundos decorridos entre
1970-01-01 00:00:00 UTC
esourceExpr
.Se
targetType
for um numérico integral, o resultado é truncado para um número inteiro.Caso contrário, o resultado será arredondado para um ajuste na escala disponível de
targetType
.Se o resultado estiver fora do intervalo de
targetType
, um erro de estouro é gerado.Use try_cast para transformar erros de estouro em
NULL
. -
Aplica-se a:
SQL do Databricks
Databricks Runtime 11.3 LTS e versões posteriores
O tipo de destino precisa ser um numérico exato.
Dado um
INTERVAL upper_unit TO lower_unit
, o resultado é medido em número total delower_unit
. Se alower_unit
forSECOND
, os segundos fracionários serão armazenados à direita do ponto decimal. Para todos os outros intervalos, o resultado é sempre um número integral. -
Se
sourceExpr
for:-
true
: o resultado é 1. -
false
: o resultado é 0. -
NULL
: o resultado éNULL
.
-
-
As regras do tipo do valor real do tipo
VARIANT
se aplicam.
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);
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
CORDA
Se o sourceExpr
for um STRING
, o resultado STRING
herdará a ordenação de sourceExpr
.
Em todos os outros casos, a ordenação do resultado STRING
é a ordenação padrão.
Para alterar a ordenação, adicione a expressão collate.
Se for targetType
um STRING
tipo e sourceExpr
for do tipo:
-
O resultado é uma cadeia de caracteres
NULL
. -
O resultado é o número literal com um sinal de menos opcional e nenhum zero à esquerda, exceto o dígito único à esquerda do ponto decimal. Se o
targetType
forDECIMAL(p, s)
coms
maior do que 0, um ponto decimal será adicionado e zeros serão adicionados à escala. -
Se o número absoluto for menor do que
10,000,000
e maior ou igual a0.001
, o resultado é expresso sem notação científica com pelo menos um dígito em ambos os lados do ponto decimal.Caso contrário, o Azure Databricks usará uma mantissa seguida por
E
e um expoente. A mantissa tem um sinal de menos à esquerda opcional seguido por um dígito à esquerda do ponto decimal e o número mínimo de dígitos maior do que zero para a direita. O expoente tem um opcional sinal de menos à esquerda. -
Se o ano estiver entre 9999 a.C. e 9999 d.C, o resultado é uma dateString do formulário
-YYYY-MM-DD
eYYYY-MM-DD
, respectivamente.Para anos anteriores ou após esse intervalo, o número necessário de dígitos é adicionado ao componente de ano e
+
é usado para d.C. -
Se o ano estiver entre 9999 a.C. e 9999 d.C, o resultado é uma timestampString do formulário
-YYYY-MM-DD hh:mm:ss
eYYYY-MM-DD hh:mm:ss
, respectivamente.Para anos anteriores ou após esse intervalo, o número necessário de dígitos é adicionado ao componente de ano e
+
é usado para d.C..f...
de segundos fracionários são adicionados, se necessário. -
Se o ano estiver entre 9999 a.C. e 9999 d.C, o resultado é uma timestampString do formulário
-YYYY-MM-DD hh:mm:ss
eYYYY-MM-DD hh:mm:ss
, respectivamente.Para anos anteriores ou após esse intervalo, o número necessário de dígitos é adicionado ao componente de ano e
+
é usado para d.C..f...
de segundos fracionários são adicionados, se necessário. -
O resultado é sua representação mais curta do literal de intervalo. Se o intervalo for negativo, o sinal será inserido no
interval-string
. Para unidades menores que 10, os zeros à esquerda são omitidos.Uma cadeia de caracteres de intervalo típica de ano/mês tem o formulário:
INTERVAL 'Y' YEAR
INTERVAL 'Y-M' YEAR TO MONTH
INTERVAL 'M' MONTH
-
O resultado é sua representação mais curta do literal de intervalo. Se o intervalo for negativo, o sinal será inserido no
interval-string
. Para unidades menores que 10, os zeros à esquerda são omitidos.Uma cadeia de caracteres típica de intervalo de dia/horário tem o formulário:
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
-
O resultado do booliano
true
é o literal deSTRING
true
. Parafalse
, é o literal STRINGfalse
. ParaNULL
é a string NULL. -
Um resultado é o
sourceExpr
binário interpretado como uma sequência de caracteres UTF-8.O Azure Databricks não valida os caracteres UTF-8. Uma conversão de
BINARY
paraSTRING
nunca injetará caracteres de substituição ou gerará um erro. -
O resultado é uma lista separada por vírgulas de elementos de conversão, que é preparada com colchetes
[ ]
. Um espaço segue cada vírgula. Um elementoNULL
é movido para umnull
literal.O Azure Databricks não cita ou marca elementos individuais, que podem conter colchetes ou vírgulas.
-
O resultado é uma lista separada por vírgulas de pares de valor de chave de conversão, que é colocada entre chaves
{ }
. Um espaço segue cada vírgula. Cada par chave/valor é separado por um->
. Um valor de mapaNULL
é movido paranull
literal.O Azure Databricks não cita ou marca valores ou chaves individuais, que podem conter chaves, vírgulas ou
->
. -
O resultado é uma lista separada por vírgulas de valores de campo de conversão, que é colocada entre chaves
{ }
. Um espaço segue cada vírgula. Um valor de campoNULL
é movido para um literalnull
.O Azure Databricks não cita ou marca valores de campo individuais, que podem conter chaves ou vírgulas.
-
As regras do tipo do valor real do tipo
VARIANT
se aplicam.
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 for targetType
um DATE
tipo e sourceExpr
for do tipo:
-
O resultado é uma
NULL
DATE
. -
sourceExpr
deve ser uma dateString válida.Se
sourceExpr
não for umdateString
válido, o Azure Databricks retornará um erro.Use try_cast para transformar erros de dados inválidos em
NULL
. -
O resultado é a parte da data do carimbo de data/hora
sourceExpr
. -
O resultado é a parte da data do carimbo de timestamp_ntz
sourceExpr
. -
As regras de tipo para o valor real mantido pelo tipo de dados
VARIANT
se aplicam.
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
> 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
Se for targetType
um TIMESTAMP
tipo e sourceExpr
for do tipo:
-
O resultado é uma
NULL
DATE
. -
sourceExpr
será 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
, um erro de estouro é gerado.Use try_cast para transformar erros de estouro em
NULL
. -
sourceExpr
deve ser um carimbo de data/hora válido.Se
sourceExpr
não for umtimestampString
válido, o Azure Databricks retornará um erro.Use try_cast para transformar erros de dados inválidos em
NULL
. -
O resultado é a
sourceExpr
DATE
às00:00:00
.
O resultado é um valor de carimbo de data/hora com os mesmos campos ano/mês/dia/hora/minuto/segundo de timestamp_ntz sourceExpr
.
-
As regras de tipo para o valor real mantido pelo tipo de dados
VARIANT
se aplicam.
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: 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
Se for targetType
um TIMESTAMP_NTZ
tipo e sourceExpr
for do tipo:
-
O resultado é uma
NULL
DATE
. -
sourceExpr
deve ser um carimbo de data/hora válido.Se
sourceExpr
não for umtimestampString
válido, o Azure Databricks retornará um erro.Use try_cast para transformar erros de dados inválidos em
NULL
. -
O resultado é o DATE
sourceExpr
em00:00:00
h. -
O resultado é hora local como o
sourceExpr
no fuso horário da sessão. -
As regras de tipo para o valor real mantido pelo tipo de dados
VARIANT
se aplicam.
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
> 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 ano/mês
Se o targetType
for um intervalo de um ano/mês e sourceExpr
for do tipo:
-
O resultado é um intervalo de ano-mês
NULL
. -
Aplica-se a:
SQL do Databricks
Databricks Runtime 11.3 LTS e versões posteriores
O numérico é interpretado como um número de unidades inferiores do
targetType
yearmonthIntervalQualifier. -
sourceExpr
deve ser um yearMonthIntervalString válido.Se
sourceExpr
não for umyearMonthIntervalString
válido, o Azure Databricks retornará um erro.Use try_cast para transformar erros de dados inválidos em
NULL
. -
Se o
targetType
yearMonthIntervalQualifier incluirMONTH
o 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 é 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
> 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 dia-horário
Se o targetType
for um intervalo de dia-horário e sourceExpr
for do tipo:
-
O resultado é um intervalo de dia-hora
NULL
. -
Aplica-se a:
SQL do Databricks
Databricks Runtime 11.3 LTS e versões posteriores
O numérico é interpretado como um número de unidades inferiores do
targetType
dayTimeIntervalQualifier. Se a unidade forSECOND
, qualquer fração será interpretada como segundos fracionários. -
sourceExpr
deve ser um dayTimeIntervalString válido.Se
sourceExpr
não for umdayTimeIntervalString
válido, o Azure Databricks retornará um erro.Use try_cast para transformar erros de dados inválidos em
NULL
. -
Se o
targetType
dayTimeIntervalQualifier 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 intervalo
sourceExpr
será 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
> 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
for um BOOLEAN e sourceExpr
for do tipo:
-
O resultado é um
NULL
de tipoBOOLEAN
. -
Se
sourceExpr
for:0
: o resultado éfalse
.-
NULL
: o resultado éNULL
. -
special floating point value
: o resultado étrue
.
Caso contrário, o resultado será
true
.-
-
Se
sourcEexpr
(não diferenciará 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, o Azure Databricks retornará uma sintaxe de entrada inválida para o tipo de erro booleano.
Use try_cast para transformar erros de dados inválidos em
NULL
. -
-
As regras do tipo do valor real do tipo
VARIANT
se aplicam.
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: 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
BINÁRIO
Se o targetType
for um BINARY e sourceExpr
for do tipo:
-
O resultado é um
NULL
de tipoBINARY
. -
O resultado é a codificação UTF-8 do
surceExpr
. -
As regras de tipo para o valor real mantido pelo tipo de dados
VARIANT
se aplicam.
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
ARRAY
Se o targetType
for um ARRAY < targetElementType > e sourceExpr
for do tipo:
-
O resultado é um
NULL
dotargeType
. -
Se houver suporte para a conversão de
sourceElementType
paratargetElementType
, o resultado é umARRAY<targetElementType>
com todos os elementos convertidos para otargetElementType
.O Azure Databricks gera um erro se a conversão não tiver suporte ou se nenhum dos elementos não puder ser convertido.
Use try_cast para transformar erros de estouro ou dados inválidos em
NULL
. -
As regras de tipo para o valor real mantido pelo tipo de dados
VARIANT
se aplicam.
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: 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
Se o targetType
for um MAP < targetKeyType, targetValueType > e sourceExpr
for do tipo:
-
O resultado é um
NULL
dotargetType
. MAP <sourceKeyType, sourceValueType >
Se houver suporte para as conversões de
sourceKeyType
paratargetKeyType
esourceValueType
paratargetValueType
, o resultado é umMAP<targetKeyType, targetValueType>
com todas as chaves convertidas para otargetKeyType
e todos os valores convertidos para otargetValueType
.O Azure Databricks gera um erro se a conversão não seja suportada ou se qualquer uma das chaves ou valores não puder ser convertida.
Use try_cast para transformar erros de estouro ou dados inválidos em
NULL
.-
As regras de tipo para o valor real mantido pelo tipo de dados
VARIANT
se aplicam. OBJECT < [sourceFieldName: sourceFieldType [, ...]] >
Cada
sourceFieldName
do tipoSTRING
é convertido emtargetKeyType
e mapeado para uma chave de mapa. Cada valor de campo de origem desourceFieldType
é convertido emtargetValueType
e mapeado para o respectivo valor de mapa.O Azure Databricks gerará um erro se não houver suporte para conversões ou se nenhum dos valores de campo ou valores de chave não puder ser convertido.
Use try_cast para transformar erros de estouro ou dados inválidos 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: 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}
ESTRUTURA
Se o targetType
for um STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, …]] > e sourceExpr
for do tipo:
-
O resultado é um
NULL
dotargetType
. STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
A
sourceExpr
pode ser convertida emtargetType
se todas essas condições forem verdadeiras:- O tipo de origem tem o mesmo número de campos que o destino
- Para todos os campos:
sourceFieldTypeN
pode ser convertido para otargetFieldTypeN
. - Para todos os valores de campo: o valor do campo de origem N pode ser convertido para
targetFieldTypeN
e o valor não é nulo se o campo de destino N estiver marcado comoNOT NULL
.
sourceFieldName
s, restriçõesNOT NULL
de origem eCOMMENT
s de origem não precisam corresponder aotargetType
e são ignorados.O Azure Databricks gera um erro se a conversão não tiver suporte ou se nenhum dos campos não puder ser convertido.
Use try_cast para transformar erros de estouro ou dados inválidos em
NULL
.-
As regras de tipo para o valor real mantido pelo tipo de dados
VARIANT
se aplicam. OBJECT < [sourceFieldName: sourceFieldType [, ...]] >
Todos os
sourceFieldName
s são equiparados asourceFieldName
s. Cada valor de campo de origemsourceFieldType
é convertido no valor equiparadotargetValueType
e mapeado para o respectivo valor de mapa.Se um
targetFieldName
não for equiparado, o valor do campo seráNULL
.Se um
sourceFieldName
não for equiparado, o campo será ignorado.O Azure Databricks gerará um erro se não houver suporte para conversões ou se nenhum dos valores de campo ou valores de chave não puder ser convertido.
Use try_cast para transformar erros de estouro ou dados inválidos 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: 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
Se o targetType
for uma VARIANT e sourceExpr
for do tipo:
-
O resultado é um
NULL
de tipoVARIANT
. -
O resultado será uma
VARIANT
representando o valor numérico. A precisão dos tiposDECIMAL
deve ser <= 38.Todos os valores numéricos inteiros são mapeados para
BIGINT
.Todos os valores
DECIMAL
são mapeados para o menor número possível de algarismos e casas decimais para a precisão desejada. -
O resultado é uma
VARIANT
que representa o valorSTRING
. -
O resultado é uma
VARIANT
que representa o valorDATE
. -
O resultado é uma
VARIANT
que representa o valorTIMESTAMP
. -
O resultado é uma
VARIANT
que representa o valorTIMESTAMP NTZ
. -
O resultado é uma
VARIANT
que representa o valorBOOLEAN
. -
O resultado é uma
VARIANT
que representa o valorBINARY
. -
Se houver suporte para a conversão de
sourceElementType
emVARIANT
, o resultado seráVARIANT
, representandoARRAY<sourceElementType>
.O Azure Databricks gera um erro se não houver suporte para a conversão.
Use try_cast para transformar erros de estouro ou dados inválidos 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