Função cast
Aplica-se a: Databricks SQL Databricks Runtime
Converte o valor expr
para o tipo type
de dados de destino. Este operador é sinónimo de :: (sinal de dois pontos) operador
Sintaxe
cast(sourceExpr AS targetType)
Argumentos
-
sourceExpr
: Qualquer expressão passível de cast. -
targetType
: O tipo de dados do resultado.
Devoluções
O resultado é o tipo targetType
.
As seguintes combinações de transmissão de tipo de dados são válidas:
Origem (linha) Destino (coluna) | VAZIO | numérico | STRING | DATE | TIMESTAMP | 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 |
DATE | N | N | Y | Y | Y | Y | N | N | N | N | N | N | N | Y | N |
TIMESTAMP | 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 for false
, um estouro não causará um erro, mas "encapsulará" o resultado.
Um sourceExpr
valor com um formato inválido ou caracteres inválidos para targetType
resultará em um NULL
arquivo .
numérico
Se o targetType
é numérico e sourceExpr
é 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 é
sourceExpr
arredondado para um ajuste à escala disponível detargetType
.Se o valor estiver fora do intervalo de , um erro de
targetType
estouro será 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 , um erro de
targetType
estouro será gerado.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 numérico integral, o resultado é truncado para um número inteiro.Caso contrário, o resultado é arredondado para um ajuste à escala disponível de
targetType
.Se o resultado estiver fora do intervalo de , um erro de
targetType
estouro será gerado.Use try_cast para transformar 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
for:-
true
: O resultado é 1. -
false
: O resultado é 0. -
NULL
: O resultado éNULL
.
-
-
Aplicam-se as regras do tipo do valor real do
VARIANT
tipo.
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 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 tipo STRING 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, exceto para o único dígito à esquerda da vírgula decimal. Se o
targetType
forDECIMAL(p, s)
coms
0 maior, um ponto decimal é adicionado e zeros à direita são adicionados à escala. -
Se o número absoluto for inferior
10,000,000
e superior ou igual a0.001
, o resultado é expresso sem notação científica com, pelo menos, um algarismo de cada lado da vírgula decimal.Caso contrário, o Azure Databricks usa um mantissa seguido por
E
e um expoente. A mantissa tem um sinal de menos à esquerda opcional seguido por um dígito à esquerda da vírgula decimal e o número mínimo de dígitos maior que zero à direita. O expoente tem e opcional sinal de menos à 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 literal intervalo. 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 literal intervalo. 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 de tempo de 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
. Poisfalse
é o literalfalse
STRING. PoisNULL
é a cadeia de caracteres NULL. -
Um resultado é o binário interpretado como uma sequência de
sourceExpr
caracteres UTF-8.O Azure Databricks não valida os caracteres UTF-8. Um elenco de para
BINARY
nunca injetará caracteres deSTRING
substituição ou levantará um erro. -
O resultado é uma lista separada por vírgulas de elementos fundidos, que é travada com 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 valores de chave de elenco, que é preparada com chaves encaracoladas
{ }
. Um espaço segue cada vírgula. Cada par de valores de chave é separado por um->
arquivo . 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 fundido, que é preparada com chaves encaracoladas
{ }
. 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 real do
VARIANT
tipo.
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
DATE
Se o targetType
é um tipo DATE e sourceExpr
é do tipo:
-
O resultado é um
NULL
DATE
arquivo . -
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
CARIMBO DE DATA/HORA
Se o é um targetType
de carimbo de data/hora e sourceExpr
é do tipo:
-
O resultado é um
NULL
DATE
arquivo . -
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 , um erro de
TIMESTAMP
estouro será gerado.Use try_cast para transformar 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
at00:00:00
hrs.
O resultado é um valor de carimbo de data/hora com os mesmos campos 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
for um tipo TIMESTAMP_NTZ e sourceExpr
for do tipo:
-
O resultado é um
NULL
DATE
arquivo . -
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 como o 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 numérico é interpretado como o número de unidades inferiores 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 for um targetType
de tempo 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
qualquer fração, são interpretados 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 é do
NULL
tipoBOOLEAN
. -
Se
sourceExpr
for: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 real do
VARIANT
tipo.
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 é do
NULL
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 o elenco de
sourceElementType
paratargetElementType
for suportado, o resultado será umARRAY<targetElementType>
com todos os elementos fundidos 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 transmissões de para e para forem suportadas, o resultado será um
sourceKeyType
com todas as teclas convertidastargetKeyType
para osourceValueType
e todos os valores para otargetValueType
.MAP<targetKeyType, targetValueType>
targetKeyType
targetValueType
O Azure Databricks gera um erro se a transmissão não for suportada ou se alguma das chaves ou valores 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 [, ...]] >
Cada
sourceFieldName
um dos tiposSTRING
é convertidotargetKeyType
e mapeado para uma chave de mapa. Cada valor de campo de origem é convertidosourceFieldType
e mapeado 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 e
targetFieldTypeN
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 combinados comsourceFieldName
s. Cada valor de campo de origem é convertido para o valor correspondentesourceFieldType
e mapeado para o respetivo valor detargetValueType
mapa.Se a
targetFieldName
não for correspondido, o valor do campo seráNULL
.Se a
sourceFieldName
não for correspondido, 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 é do
NULL
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
DECIMAL
valores 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 o elenco de
sourceElementType
paraVARIANT
for suportado, 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