Partilhar via


Função cast

Aplica-se a: Marque Sim Databricks SQL Marque Sim Databricks Runtime

Converte o valor expr para o tipo typede 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 NULLarquivo .

numérico

Se o targetType é numérico e sourceExpr é do tipo:

  • VAZIO

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

  • numérico

    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 de targetType.

    Se o valor estiver fora do intervalo de , um erro de targetTypeestouro será gerado.

    Use try_cast para transformar erros de estouro em NULL.

  • STRING

    sourceExpr é lido como um valor literal do targetType.

    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 targetTypeestouro será gerado.

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

  • TIMESTAMP

    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 é arredondado para um ajuste à escala disponível de targetType.

    Se o resultado estiver fora do intervalo de , um erro de targetTypeestouro será gerado.

    Use try_cast para transformar erros de estouro em NULL.

  • INTERVALO

    Aplica-se a: Marque Sim Databricks SQL Marque Sim 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 de lower_unit. Se for lower_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.

  • BOOLEANO

    Se sourceExpr for:

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

    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 targetType é um tipo STRING e sourceExpr é do tipo:

  • VAZIO

    O resultado é uma NULL cadeia de caracteres.

  • numérico exato

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

  • binário de ponto flutuante

    Se o número absoluto for inferior 10,000,000 e superior ou igual a 0.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.

  • DATE

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

  • TIMESTAMP

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

  • TIMESTAMP_NTZ

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

  • intervalo ano-mês

    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
  • intervalo diurno

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

    O resultado do true booleano é o STRING literal true. Pois false é o literal falseSTRING. Pois NULL é a cadeia de caracteres NULL.

  • BINÁRIO

    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 STRING nunca injetará caracteres de BINARY substituição ou levantará um erro.

  • MATRIZ

    O resultado é uma lista separada por vírgulas de elementos fundidos, que é travada com colchetes [ ]. Um espaço segue cada vírgula. Um NULL elemento é traduzido para um literal null.

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

  • MAPA

    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 . Um NULL valor de mapa é traduzido para literal null.

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

  • ESTRUTURA

    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. Um NULL valor de campo é traduzido para um literal null.

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

  • VARIANTE

    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

DATE

Se o targetType é um tipo DATE e sourceExpr é do tipo:

  • VAZIO

    O resultado é um NULL DATEarquivo .

  • STRING

    sourceExprdeve ser um dateString válido.

    Se sourceExpr não for válido dateString, o Azure Databricks retornará um erro.

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

  • TIMESTAMP

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

  • TIMESTAMP_NTZ

    O resultado é a parte de data do timestamp_ntz sourceExpr.

  • VARIANTE

    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 tipo de carimbo targetType de data/hora e sourceExpr é do tipo:

  • VAZIO

    O resultado é um NULL DATEarquivo .

  • numérico

    sourceExpr é 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 , um erro de TIMESTAMPestouro será gerado.

    Use try_cast para transformar erros de estouro em NULL.

  • STRING

    sourceExprdeve ser um timestampString válido.

    Se sourceExpr não for válido timestampString, o Azure Databricks retornará um erro.

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

  • DATE

    O resultado é o sourceExpr DATE at 00:00:00hrs.

  • 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

    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:

  • VAZIO

    O resultado é um NULL DATEarquivo .

  • STRING

    sourceExprdeve ser um timestampString válido.

    Se sourceExpr não for válido timestampString, o Azure Databricks retornará um erro.

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

  • DATE

    O resultado é a sourceExpr DATA às 00:00:00horas.

  • TIMESTAMP

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

  • VARIANTE

    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:

  • VAZIO

    O resultado é um intervalo ano-mês NULL .

  • integral_numeric

    Aplica-se a: Marque Sim Databricks SQL Marque Sim Databricks Runtime 11.3 LTS e superior

    O numérico é interpretado como o número de unidades inferiores do targetType anomêsIntervalQualifier.

  • STRING

    sourceExprdeve ser um yearMonthIntervalString válido.

    Se sourceExpr não for válido yearMonthIntervalString, o Azure Databricks retornará um erro.

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

  • intervalo ano-mês

    Se o targetType yearMonthIntervalQualifier incluir MONTH 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 intervalo de tempo diurno targetType e sourceExpr for do tipo:

  • VAZIO

    O resultado é um NULL intervalo de tempo diurno.

  • exact_numeric

    Aplica-se a: Marque Sim Databricks SQL Marque Sim Databricks Runtime 11.3 LTS e superior

    O numérico é interpretado como o número de unidades inferiores do targetType dayTimeIntervalQualifier. Se a unidade for SECOND qualquer fração, são interpretados como segundos fracionários.

  • STRING

    sourceExprdeve ser um dayTimeIntervalString válido.

    Se sourceExpr não for válido dayTimeIntervalString, o Azure Databricks retornará um erro.

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

  • intervalo diurno

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

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

  • VAZIO

    O resultado é do NULL tipo BOOLEAN.

  • numérico

    Se sourceExpr for:

    • 0: O resultado é false.

      Caso contrário, o resultado é true.

  • STRING

    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.

  • VARIANTE

    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:

  • VAZIO

    O resultado é do NULL tipo BINARY.

  • STRING

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

  • VARIANTE

    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:

  • VAZIO

    O resultado é um NULL dos targeType.

  • ARRAY < sourceElementType >

    Se o elenco de sourceElementType para targetElementType for suportado, o resultado será um ARRAY<targetElementType> com todos os elementos fundidos para o targetElementType.

    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.

  • VARIANTE

    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:

  • VAZIO

    O resultado é um NULL dos targetType.

  • <MAP sourceKeyType, sourceValueType>

    Se as transmissões de para e para forem suportadas, o resultado será um MAP<targetKeyType, targetValueType> com todas as teclas convertidas sourceKeyType para o targetKeyType e todos os valores para o targetValueType.targetValueType sourceValueType targetKeyType

    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.

  • VARIANTE

    Aplicam-se as regras de tipo para o valor real mantido pelo VARIANT tipo de dados.

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

    Cada sourceFieldName um dos tipos STRING é convertido targetKeyType e mapeado para uma chave de mapa. Cada valor de campo de origem é convertido targetValueType e mapeado o respetivo valor de sourceFieldType 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:

  • VAZIO

    O resultado é um NULL dos targetType.

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

    O sourceExpr pode ser lançado para targetType 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 o targetFieldTypeN.
    • 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 como NOT NULL.

    sourceFieldNames, restrições de origem NOT NULL e fonte COMMENTs não precisam corresponder ao targetType 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.

  • VARIANTE

    Aplicam-se as regras de tipo para o valor real mantido pelo VARIANT tipo de dados.

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

    Todos os sourceFieldNames são combinados com sourceFieldNames. Cada valor de campo de origem é convertido para o valor correspondente targetValueType e mapeado para o respetivo valor de sourceFieldType 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:

  • VAZIO

    O resultado é do NULL tipo VARIANT.

  • numérico

    O resultado é um VARIANT, representando o valor numérico. A precisão dos DECIMAL 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.

  • STRING

    O resultado é um VARIANT, representando o STRING valor.

  • DATE

    O resultado é um VARIANT, representando o DATE valor.

  • TIMESTAMP

    O resultado é um VARIANT, representando o TIMESTAMP valor.

  • TIMESTAMP_NTZ

    O resultado é um VARIANT, representando o TIMESTAMP NTZ valor.

  • BOOLEANO

    O resultado é um VARIANT, representando o BOOLEAN valor.

  • BINÁRIO

    O resultado é um VARIANT, representando o BINARY valor.

  • ARRAY < sourceElementType >

    Se o elenco de sourceElementType para VARIANT for suportado, o resultado será VARIANT, representando ARRAY<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