Compartilhar via


Função cast

Aplica-se a:marca de seleção positiva SQL do Databricks marca de seleção positiva 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

Condições de erro comuns

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:

  • VAZIO

    O resultado é um NULL do tipo numérico especificado.

  • numérico

    Se targetType for um numérico integral, o resultado é sourceExprtruncado para um número inteiro.

    Caso contrário, o resultado será sourceExprarredondado para uma escala de targetTypedisponível.

    Se o valor estiver fora do intervalo de targetType, Azure Databricks aumentará CAST_OVERFLOW.

    Use try_cast para transformar erros de estouro em NULL.

  • CORDA

    sourceExpr é lido como um valor literal do targetType.

    Se sourceExpr não estiver em conformidade com o formato de valores literais, Azure Databricks aumentará CAST_INVALID_INPUT.

    Se o valor estiver fora do intervalo do targetType, Azure Databricks aumentará CAST_OVERFLOW.

    Use try_cast para transformar erros de estouro e formato inválidos em NULL.

  • CARIMBO DE DATA/HORA

    O resultado é o número de segundos decorridos entre 1970-01-01 00:00:00 UTC e sourceExpr.

    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, Azure Databricks aumentará CAST_OVERFLOW.

    Use try_cast para transformar erros de estouro em NULL.

  • INTERVALO

    Aplica-se a:verificação marcada como sim SQL do Databricks verificação marcada como sim 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 de lower_unit. Se a lower_unit for SECOND, os segundos fracionários serão armazenados à direita do ponto decimal. Para todos os outros intervalos, o resultado é sempre um número integral.

  • BOOLIANO

    Se sourceExpr for:

    • true: o resultado é 1.
    • false: o resultado é 0.
    • NULL: o resultado é NULL.
  • VARIANTE

    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);
  Error: CAST_OVERFLOW

> SELECT cast(128 AS DECIMAL(2, 0));
  Error: CAST_OVERFLOW

> SELECT cast('123' AS INT);
  123

> SELECT cast('123.0' AS INT);
  Error: CAST_INVALID_INPUT

> SELECT cast(TIMESTAMP'1970-01-01 00:00:01' AS LONG);
  1

> SELECT cast(TIMESTAMP'1970-01-01 00:00:00.000001' AS DOUBLE);
  1.0E-6

> SELECT cast(TIMESTAMP'2022-02-01 00:00:00' AS SMALLINT);
  Error: CAST_OVERFLOW
> SELECT cast(true AS BOOLEAN);
  1

> SELECT cast(INTERVAL '1-2' YEAR TO MONTH AS INTEGER);
  14

> SELECT cast(INTERVAL '1:30.5' MINUTE TO SECOND AS DECIMAL(5, 2));
  90.50

> SELECT cast(TRUE AS INT);
  1

> SELECT cast(FALSE AS INT);
  0

> SELECT cast('15'::VARIANT AS INT);
  15

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:

  • VAZIO

    O resultado é uma cadeia de caracteres NULL.

  • numérico exato

    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 for DECIMAL(p, s) com s maior do que 0, um ponto decimal será adicionado e zeros serão adicionados à escala.

  • binário de ponto flutuante

    Se o número absoluto for menor do que 10,000,000 e maior ou igual a 0.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, Azure Databricks usa 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.

  • DATA

    Se o ano estiver entre 9999 a.C. e 9999 d.C, o resultado é uma dateString do formulário -YYYY-MM-DD e YYYY-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.

  • CARIMBO DE DATA/HORA

    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 e YYYY-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.

  • TIMESTAMP_NTZ

    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 e YYYY-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.

  • intervalo de ano-mês

    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
  • intervalo de dia-tempo

    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
  • BOOLIANO

    O resultado do booliano true é o literal de STRINGtrue. Para false, é o literal STRING false. Para NULL é a string NULL.

  • BINÁRIO

    Um resultado é o sourceExpr binário interpretado como uma sequência de caracteres UTF-8.

    Azure Databricks não valida os caracteres UTF-8. Uma conversão de BINARY para STRING nunca injetará caracteres de substituição ou gerará um erro.

  • MATRIZ

    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 elemento NULL é movido para um null literal.

    Azure Databricks não cita ou marca elementos individuais, que podem conter colchetes ou vírgulas.

  • MAPA

    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 mapa NULL é movido para null literal.

    Azure Databricks não aspas ou valores individuais, que podem conter chaves, vírgulas ou ->.

  • ESTRUTURA

    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 campo NULL é movido para um literal null.

    Azure Databricks não cita ou marca valores de campo individuais, que podem conter chaves ou vírgulas.

  • VARIANTE

    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:

  • VAZIO

    O resultado é uma NULLDATE.

  • CORDA

    sourceExpr deve ser uma dateString válida.

    Se sourceExpr não for um dateString válido, Azure Databricks gerará CAST_INVALID_INPUT.

    Use try_cast para transformar erros de dados inválidos em NULL.

  • CARIMBO DE DATA/HORA

    O resultado é a parte da data do carimbo de data/hora sourceExpr.

  • TIMESTAMP_NTZ

    O resultado é a parte da data do carimbo de timestamp_ntz sourceExpr.

  • VARIANTE

    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: CAST_INVALID_INPUT

> SELECT cast(TIMESTAMP'1900-10-01 12:13:14' AS DATE);
  1900-10-01

> SELECT cast(TIMESTAMP_NTZ'1900-10-01 12:13:14' AS DATE);
  1900-10-01

> SELECT cast(TIMESTAMP_NTZ'1900-10-01 12:13:14'::VARIANT AS DATE);
  1900-10-01

timestamp

Se for targetType um TIMESTAMP tipo e sourceExpr for do tipo:

  • VAZIO

    O resultado é uma NULLDATE.

  • numérico

    sourceExpr será lido como o número de segundos desde 1970-01-01 00:00:00 UTC.

    Frações menores que microssegundos são truncadas.

    Se o valor estiver fora do intervalo de TIMESTAMP, Azure Databricks aumentará CAST_OVERFLOW.

    Use try_cast para transformar erros de estouro em NULL.

  • CORDA

    sourceExpr deve ser um carimbo de data/hora válido.

    Se sourceExpr não for um timestampString válido, Azure Databricks gerará CAST_INVALID_INPUT.

    Use try_cast para transformar erros de dados inválidos em NULL.

  • DATA

    O resultado é a sourceExprDATE às 00:00:00.

  • TIMESTAMP_NTZ

O resultado é um valor de carimbo de data/hora com os mesmos campos ano/mês/dia/hora/minuto/segundo de timestamp_ntz sourceExpr.

  • VARIANTE

    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: CAST_OVERFLOW

> SELECT cast('1900' AS TIMESTAMP);
  1900-01-01 00:00:00

> SELECT cast('1900-10-01 12:13:14' AS TIMESTAMP);
  1900-10-01 12:13:14

> SELECT cast('1900-02-30 12:13:14' AS TIMESTAMP);
  Error: CAST_INVALID_INPUT

> SELECT cast(DATE'1900-10-01' AS TIMESTAMP);
  1900-10-01 00:00:00

> SELECT cast(TIMESTAMP_NTZ'2023-01-01 02:03:04.567' as TIMESTAMP)
  2023-01-01 02:03:04.567

> SELECT cast(DATE'1900-10-01'::VARIANT AS TIMESTAMP);
  1900-10-01 00:00:00

TIMESTAMP_NTZ

Se for targetType um TIMESTAMP_NTZ tipo e sourceExpr for do tipo:

  • VAZIO

    O resultado é uma NULLDATE.

  • CORDA

    sourceExpr deve ser um carimbo de data/hora válido.

    Se sourceExpr não for um timestampString válido, Azure Databricks gerará CAST_INVALID_INPUT.

    Use try_cast para transformar erros de dados inválidos em NULL.

  • DATA

    O resultado é o DATE sourceExpr em 00:00:00h.

  • CARIMBO DE DATA/HORA

    O resultado é hora local como o sourceExpr no fuso horário da sessão.

  • VARIANTE

    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: CAST_INVALID_INPUT

> SELECT cast(DATE'1900-10-01' AS TIMESTAMP_NTZ);
  1900-10-01 00:00:00

> SELECT current_timezone(), CAST(TIMESTAMP'2021-7-1T8:43:28' as TIMESTAMP_NTZ);
  America/Los_Angeles 2021-07-01 08:43:28

> SELECT current_timezone(), CAST(TIMESTAMP'2021-7-1T8:43:28UTC+3' as TIMESTAMP_NTZ);
  America/Los_Angeles 2021-06-30 22:43:28

> SELECT cast(DATE'1900-10-01'::VARIANT AS TIMESTAMP_NTZ);
  1900-10-01 00:00:00

intervalo de ano/mês

Se o targetType for um intervalo de um ano/mês e sourceExpr for do tipo:

Exemplos

> SELECT cast(NULL AS INTERVAL YEAR);
  NULL

> SELECT cast('1-4' AS INTERVAL YEAR TO MONTH)::STRING;
  INTERVAL '1-4' YEAR TO MONTH

> SELECT cast('1' AS INTERVAL YEAR TO MONTH);
  Error: CAST_INVALID_INPUT

> SELECT cast(INTERVAL '1-4' YEAR TO MONTH AS INTERVAL MONTH)::STRING;
  INTERVAL '16' MONTH

> SELECT cast(14 AS INTERVAL YEAR TO MONTH)::STRING;
  INTERVAL '1-2' YEAR TO MONTH

> SELECT cast(INTERVAL '1-11' YEAR TO MONTH AS INTERVAL YEAR)::STRING;
  INTERVAL '1' YEAR

intervalo de dia-horário

Se o targetType for um intervalo de dia-horário e sourceExpr for do tipo:

  • VAZIO

    O resultado é um intervalo de dia-hora NULL.

  • exact_numeric

    Aplica-se a:verificação marcada como sim SQL do Databricks verificação marcada como sim Databricks Runtime 11.3 LTS e versões posteriores

    O numérico é interpretado como um número de unidades inferiores do targetTypedayTimeIntervalQualifier. Se a unidade for SECOND, qualquer fração será interpretada como segundos fracionários.

  • CORDA

    sourceExpr deve ser um dayTimeIntervalString válido.

    Se sourceExpr não for um dayTimeIntervalString válido, Azure Databricks gerará CAST_INVALID_INPUT.

    Use try_cast para transformar erros de dados inválidos em NULL.

  • intervalo de dia-tempo

    Se o targetTypedayTimeIntervalQualifier incluir a menor unidade do tipo de origem dayTimeIntervalQualifier, o valor permanecerá inalterado, mas será reinterpretado para corresponder ao tipo de destino.

    Caso contrário, o intervalo sourceExpr será truncado para se ajustar ao targetType.

> SELECT cast(NULL AS INTERVAL HOUR);
  NULL

> SELECT cast('1 4:23' AS INTERVAL DAY TO MINUTE)::STRING;
  INTERVAL '1 04:23' DAY TO MINUTE

> SELECT cast('1' AS INTERVAL DAY TO MINUTE);
  Error: CAST_INVALID_INPUT

> SELECT cast(INTERVAL '1 4:23' DAY TO MINUTE AS INTERVAL MINUTE)::STRING;
  INTERVAL '1703' MINUTE

> SELECT cast(INTERVAL '1 4:23' DAY TO MINUTE AS INTERVAL HOUR)::STRING;
  INTERVAL '28' HOUR

> SELECT cast(125.3 AS INTERVAL MINUTE TO SECOND)::STRING;
  INTERVAL '2:5.3' MINUTE TO SECOND

BOOLEANO

Se o targetType for um BOOLEAN e sourceExpr for do tipo:

  • VAZIO

    O resultado é um NULL de tipo BOOLEAN.

  • numérico

    Se sourceExpr for:

    • 0: o resultado é false.

      Caso contrário, o resultado será true.

  • CORDA

    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, Azure Databricks gera CAST_INVALID_INPUT.

    Use try_cast para transformar erros de dados inválidos em NULL.

  • VARIANTE

    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: CAST_INVALID_INPUT

> SELECT cast(0 AS BOOLEAN);
  false

> SELECT cast(0.0E10 AS BOOLEAN);
  false

> SELECT cast(1 AS BOOLEAN);
  true

> SELECT cast(0.1 AS BOOLEAN);
  true

> SELECT cast('NaN'::FLOAT AS BOOLEAN);
  true

> SELECT cast(1::VARIANT AS BOOLEAN);
  true

BINÁRIO

Se o targetType for um BINARY e sourceExpr for do tipo:

  • VAZIO

    O resultado é um NULL de tipo BINARY.

  • CORDA

    O resultado é a codificação UTF-8 do surceExpr.

  • VARIANTE

    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:

  • VAZIO

    O resultado é um NULL do targeType.

  • ARRAY < tipoElementoFonte >

    Se houver suporte para a conversão de sourceElementType para targetElementType, o resultado é um ARRAY<targetElementType> com todos os elementos convertidos para o targetElementType.

    Azure Databricks gerará um erro se a conversão não tiver suporte ou se algum dos elementos não puder ser convertido.

    Use try_cast para transformar erros de estouro ou dados inválidos em NULL.

  • VARIANTE

    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: DATATYPE_MISMATCH

> SELECT cast(array('t', 'f', 'o') AS ARRAY<BOOLEAN>);
  Error: CAST_INVALID_INPUT

> SELECT cast(array('t', 'f', NULL)::VARIANT AS ARRAY<BOOLEAN>);
  [true, false, NULL]

Mapa

Se o targetType for um MAP < targetKeyType, targetValueType > e sourceExpr for do tipo:

  • VAZIO

    O resultado é um NULL do targetType.

  • MAP <sourceKeyType, sourceValueType >

    Se houver suporte para as conversões de sourceKeyType para targetKeyType e sourceValueType para targetValueType, o resultado é um MAP<targetKeyType, targetValueType> com todas as chaves convertidas para o targetKeyType e todos os valores convertidos para o targetValueType.

    Azure Databricks gerará um erro se a conversão não tiver suporte ou se alguma das chaves ou valores não puder ser convertido.

    Use try_cast para transformar erros de estouro ou dados inválidos em NULL.

  • VARIANTE

    As regras de tipo para o valor real mantido pelo tipo de dados VARIANT se aplicam.

  • OBJECT < [sourceFieldName: sourceFieldType [, ...]] >

    Cada sourceFieldName do tipo STRING é convertido em targetKeyType e mapeado para uma chave de mapa. Cada valor de campo de origem de sourceFieldType é convertido em targetValueType e mapeado para o respectivo valor de mapa.

    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: DATATYPE_MISMATCH

> SELECT cast(map('10', 't', '15', 'f', '20', 'o') AS MAP<INT, BOOLEAN>);
  Error: CAST_INVALID_INPUT

-- Casting an OBJECT to a MAP
> SELECT schema_of_variant(parse_json('{"cars": 12, "bicycles": 5 }'));
  OBJECT<bicycles: BIGINT, cars: BIGINT>
> SELECT CAST(parse_json('{"cars": 12, "bicycles": 5 }') AS MAP<STRING, INTEGER>);
  {bicycles -> 5, cars -> 12}

ESTRUTURA

Se o targetType for um STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, …]] > e sourceExpr for do tipo:

  • VAZIO

    O resultado é um NULL do targetType.

  • STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >

    A sourceExpr pode ser convertida em targetType 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 o targetFieldTypeN.
    • 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 como NOT NULL.

    sourceFieldNames, restrições NOT NULL de origem e COMMENTs de origem não precisam corresponder ao targetType e são ignorados.

    Azure Databricks gerará um erro se a conversão não tiver suporte ou se algum dos campos não puder ser convertido.

    Use try_cast para transformar erros de estouro ou dados inválidos em NULL.

  • VARIANTE

    As regras de tipo para o valor real mantido pelo tipo de dados VARIANT se aplicam.

  • OBJECT < [sourceFieldName: sourceFieldType [, ...]] >

    Todos os sourceFieldNames são equiparados a sourceFieldNames. Cada valor de campo de origem sourceFieldType é convertido no valor equiparado targetValueType 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.

    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: DATATYPE_MISMATCH

> SELECT cast(named_struct('a', 't', 'b', '1900') AS STRUCT<b:BOOLEAN, c:ARRAY<INT>>);
  Error: DATATYPE_MISMATCH

> SELECT cast(named_struct('a', 't', 'b', 'hello') AS STRUCT<b:BOOLEAN, c:DATE>);
  Error: CAST_INVALID_INPUT

> SELECT cast(named_struct('a', 't', 'b', '1900-01-01')::VARIANT AS STRUCT<b:BOOLEAN, c:DATE NOT NULL COMMENT 'Hello'>);
  {"b":true,"c":1900-01-01}

-- Casting an OBJECT to a STRUCT
> SELECT schema_of_variant(parse_json('{"name": "jason", "age": 25 }'));
  OBJECT<age: BIGINT, name: STRING>
> SELECT CAST(parse_json('{"name": "jason", "age": 25 }') AS STRUCT<id: BIGINT, name: STRING>);
  {"id":null,"name":"jason"}

VARIANTE

Se o targetType for uma VARIANT e sourceExpr for do tipo:

  • VAZIO

    O resultado é um NULL de tipo VARIANT.

  • numérico

    O resultado será uma VARIANT representando o valor numérico. A precisão dos tipos DECIMAL 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.

  • CORDA

    O resultado é uma VARIANT que representa o valor STRING.

  • DATA

    O resultado é uma VARIANT que representa o valor DATE.

  • CARIMBO DE DATA/HORA

    O resultado é uma VARIANT que representa o valor TIMESTAMP.

  • TIMESTAMP_NTZ

    O resultado é uma VARIANT que representa o valor TIMESTAMP NTZ.

  • BOOLIANO

    O resultado é uma VARIANT que representa o valor BOOLEAN.

  • BINÁRIO

    O resultado é uma VARIANT que representa o valor BINARY.

  • ARRAY < tipoElementoFonte >

    Se houver suporte para a conversão de sourceElementType em VARIANT, o resultado será VARIANT, representando ARRAY<sourceElementType>.

    Azure Databricks gerará um erro se não houver suporte para a conversão.

  • ESTRUTURA

    Não há suporte para essa conversão diretamente, pois VARIANT não é capaz de preservar a ordem dos campos de struct. Use to_variant_object para converter STRUCT em VARIANT como um OBJECT.

  • MAPA

    Essa conversão não tem suporte direto, pois VARIANT não pode preservar o tipo MAP. Use to_variant_object para converter MAP em VARIANT como um OBJECT. As chaves de mapa devem ser cadeias de caracteres.

    Azure Databricks gerará 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