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 type
de 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 |
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
NULL
do tipo numérico especificado. -
Se
targetType
for um número integral, o resultado ésourceExpr
truncado para se tornar um número inteiro.Caso contrário, o resultado é
sourceExpr
arredondado para ajustar à escala disponível detargetType
.Se o valor estiver fora do intervalo de
targetType
, será gerado um erro de estouro.Use try_cast para converter 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 de
targetType
, será gerado um erro de 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 UTC
esourceExpr
.Se
targetType
for 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
, um erro de estouro será gerado.Use try_cast para converter erros de estouro em
NULL
. -
Aplica-se a:
Databricks SQL
Databricks Runtime 11.3 LTS e superior
O 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_unit
SECOND
, 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);
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
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
NULL
cadeia 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
targetType
forDECIMAL(p, s)
coms
maior 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,000
e 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, o Azure Databricks usa uma mantissa seguida por
E
e 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-DD
eYYYY-MM-DD
respectivamente.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:ss
eYYYY-MM-DD hh:mm:ss
respectivamente.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:ss
eYYYY-MM-DD hh:mm:ss
respectivamente.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' YEAR
INTERVAL 'Y-M' YEAR TO MONTH
INTERVAL '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' 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
true
booleano é oSTRING
literaltrue
. Parafalse
é o literal STRINGfalse
. ParaNULL
é a cadeia de caracteres NULL. -
Um resultado é o binário
sourceExpr
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 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. UmNULL
elemento é traduzido para um literalnull
.O Azure Databricks não cita nem marca elementos individuais, que podem conter colchetes 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->
. UmNULL
valor de mapa é traduzido para literalnull
.O Azure Databricks não cita ou marca chaves ou valores individuais, que podem conter chaves, 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. UmNULL
valor de campo é traduzido para um literalnull
.O Azure Databricks não cita ou marca valores de campo individuais, que podem conter chaves 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
NULL
DATE
. -
sourceExpr
deve ser um dateString válido.Se
sourceExpr
não for válidodateString
, o Azure Databricks retornará um erro.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
VARIANT
tipo 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
> 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
NULL
DATE
. -
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
, será gerado um erro de estouro.Use try_cast para converter erros de estouro em
NULL
. -
sourceExpr
deve ser um timestampString válido.Se
sourceExpr
não for válidotimestampString
, o Azure Databricks retornará um erro.Use try_cast para transformar erros de dados inválidos em
NULL
. -
O resultado é o
sourceExpr
DATE
às00:00:00
h.
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
VARIANT
tipo 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: 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
é um TIMESTAMP_NTZ
tipo e sourceExpr
é do tipo:
-
O resultado é um arquivo
NULL
DATE
. -
sourceExpr
deve ser um timestampString válido.Se
sourceExpr
não for válidotimestampString
, o Azure Databricks retornará um erro.Use try_cast para transformar erros de dados inválidos em
NULL
. -
O resultado é a
sourceExpr
DATA às00:00:00
horas. -
O resultado é a hora local dentro do fuso
sourceExpr
horário da sessão. -
Aplicam-se as regras de tipo para o valor real mantido pelo
VARIANT
tipo 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
> 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 superior
O valor numérico é interpretado como o número de unidades menores do
targetType
anomêsIntervalQualifier. -
sourceExpr
deve ser um yearMonthIntervalString válido.Se
sourceExpr
não for válidoyearMonthIntervalString
, 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 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
> 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
NULL
intervalo de tempo diurno. -
Aplica-se a:
Databricks SQL
Databricks Runtime 11.3 LTS e superior
O numérico é interpretado como o número de unidades inferiores do
targetType
dayTimeIntervalQualifier. Se a unidade forSECOND
, quaisquer frações são interpretadas como segundos fracionários. -
sourceExpr
deve ser um dayTimeIntervalString válido.Se
sourceExpr
não for válidodayTimeIntervalString
, 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
sourceExpr
intervalo é 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
é um BOOLEANO e sourceExpr
é do tipo:
-
O resultado é um
NULL
do 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
sourcEexpr
for (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, o Azure Databricks retorna uma sintaxe de entrada inválida para erro booleano de tipo.
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: 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
é um BINÁRIO e sourceExpr
é do tipo:
-
O resultado é um
NULL
do tipoBINARY
. -
O resultado é a codificação UTF-8 do
surceExpr
. -
Aplicam-se as regras de tipo para o valor real mantido pelo
VARIANT
tipo 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
NULL
dostargeType
. -
Se a conversão de
sourceElementType
paratargetElementType
for suportada, o resultado será umARRAY<targetElementType>
com todos os elementos convertidos para otargetElementType
.O Azure Databricks gera um erro se a transmissão não for suportada ou se algum dos elementos não puder ser transmitido.
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
VARIANT
tipo 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: 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
é um MAP < targetKeyType, targetValueType > e sourceExpr
é do tipo:
-
O resultado é um
NULL
dostargetType
. <MAP sourceKeyType, sourceValueType>
Se as conversões de
sourceKeyType
paratargetKeyType
esourceValueType
paratargetValueType
forem suportadas, o resultado será umMAP<targetKeyType, targetValueType>
com todas as chaves convertidas para otargetKeyType
e todos os valores convertidos para otargetValueType
.O Azure Databricks apresenta um erro se a conversão não for suportada ou se alguma das chaves ou valores não puder ser convertida.
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
VARIANT
tipo de dados. OBJECT < [sourceFieldName : sourceFieldType [, ...]] >
Cada
sourceFieldName
do tipoSTRING
é convertido emtargetKeyType
e mapeado para uma chave de mapa. Cada valor de campo de origem desourceFieldType
é convertido e mapeado para o respetivo valor detargetValueType
mapa.O Azure Databricks gera um erro se não houver suporte para quaisquer transmissões ou se algum dos valores de campo ou valores de chave não puder ser transmitido.
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: 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
é um STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, ...]] > e sourceExpr
é do tipo:
-
O resultado é um
NULL
dostargetType
. STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
O
sourceExpr
pode ser lançado paratargetType
se todas estas 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ções de origemNOT NULL
e fonteCOMMENT
s não precisam corresponder aotargetType
e são ignorados.O Azure Databricks gera um erro se a transmissão não for suportada ou se algum dos campos não puder ser transmitido.
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
VARIANT
tipo de dados. OBJECT < [sourceFieldName : sourceFieldType [, ...]] >
Todos os
sourceFieldName
s são emparelhados comsourceFieldName
s. Cada valor do campo de origem desourceFieldType
é transformado para combinar comtargetValueType
e mapeado para o respetivo valor no mapa.Se a
targetFieldName
não tiver correspondência, o valor do campo éNULL
.Se a
sourceFieldName
não for compatível, o campo será ignorado.O Azure Databricks gera um erro se não houver suporte para quaisquer transmissões ou se algum dos valores de campo ou valores de chave não puder ser transmitido.
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: 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
é uma VARIANTE e sourceExpr
é do tipo:
-
O resultado é um
NULL
do tipoVARIANT
. -
O resultado é um
VARIANT
, representando o valor numérico. A precisão dosDECIMAL
tipos deve ser <= 38.Todos os números integrais são mapeados para
BIGINT
.Todos os valores
DECIMAL
são mapeados com sua precisão e escala mais estreitas. -
O resultado é um
VARIANT
, representando oSTRING
valor. -
O resultado é um
VARIANT
, representando oDATE
valor. -
O resultado é um
VARIANT
, representando oTIMESTAMP
valor. -
O resultado é um
VARIANT
, representando oTIMESTAMP NTZ
valor. -
O resultado é um
VARIANT
, representando oBOOLEAN
valor. -
O resultado é um
VARIANT
, representando oBINARY
valor. -
Se a conversão de
sourceElementType
paraVARIANT
for suportada, o resultado seráVARIANT
, representandoARRAY<sourceElementType>
.O Azure Databricks gera um erro se a transmissão não for suportada.
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