Função cast
Aplica-se a: SQL do Databricks
Databricks Runtime
Converte o valor expr
no tipo de dados de destino type
. Esse operador é sinônimo de :: (sinal de dois pontos) operador
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) | VOID | numeric | STRING | DATE | TIMESTAMP | TIMESTAMP_NTZ | intervalo de ano-mês | intervalo de dia-tempo | BOOLIANO | BINARY | ARRAY | MAP | STRUCT | VARIANT | OBJECT |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
VOID | S | N | N | N | N | N | N | N | N | N | N | N | N | Y | N |
numeric | N | S | Y | N | Y | N | S | N | Y | N | N | N | N | Y | N |
STRING | N | S | N | N | N | N | N | N | N | Y | N | N | N | Y | N |
DATE | N | N | S | N | N | Y | N | N | N | N | N | N | N | Y | N |
TIMESTAMP | N | S | N | N | N | Y | N | N | N | N | N | N | N | Y | N |
TIMESTAMP_NTZ | N | N | S | N | N | Y | N | N | N | N | N | N | N | Y | N |
intervalo de ano-mês | N | S | Y | N | N | N | Y | N | N | N | N | N | N | N | N |
intervalo de dia-tempo | N | S | Y | N | N | N | N | Y | N | N | N | N | N | N | N |
BOOLIANO | N | S | Y | N | Y | N | N | N | Y | N | N | N | N | Y | N |
BINARY | N | S | Y | N | N | N | N | N | N | Y | N | N | N | Y | N |
ARRAY | N | N | Y | N | N | N | N | N | N | N | Y | N | N | Y | N |
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 | S | N | N | N | Y | N | N | S | N | N | N | N | Y | N |
OBJECT | N | N | N | N | N | N | N | N | N | N | N | S | Y | 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
.
numeric
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 para 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
STRING
Se o targetType
for um do tipo STRING 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 de cadeia de caracteresfalse
. ParaNULL
é a cadeia de caracteres 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
DATE
Se targetType
for um do tipo DATE 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 o targetType
for um do tipo TIMESTAMP 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 o targetType
for um do tipo TIMESTAMP_NTZ 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
BOOLEAN
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
BINARY
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 quando a conversão não tem suporte ou nenhum dos elementos pode 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]
MAP
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 quando a conversão não tem suporte ou nenhum dos valores ou chaves pode 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 [, …]] >
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 irá gerar um erro se nenhuma conversão tiver suporte ou se nenhum dos valores de campo ou de chave 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}
STRUCT
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 será nulo se o campo de destino N for 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 quando a conversão não tem suporte ou nenhum dos elementos pode 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 irá gerar um erro se nenhuma conversão tiver suporte ou se nenhum dos valores de campo ou de chave 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"}
VARIANT
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 irá gerar um erro se a conversão não tiver suporte.
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