Compatibilidade e conversão dos tipos - AWS Clean Rooms

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Compatibilidade e conversão dos tipos

A discussão a seguir descreve como as regras de conversão de tipo e a compatibilidade de tipos de dados funcionam no AWS Clean Rooms.

Compatibilidade

A correspondência de tipo de dados e de valores e constantes literais com tipos de dados ocorre durante diversas operações do banco de dados, incluindo o seguinte:

  • Operações de linguagem de manipulação de dados (DML) em tabelas

  • Consultas de UNION, INTERSECT e EXCEPT

  • Expressões de CASOS

  • Avaliação de predicados, tais como LIKE e IN

  • Avaliação de funções SQL que fazem comparações ou extrações de dados

  • Comparações com operadores matemáticos

Os resultados dessas operações dependem das regras de conversão de tipo e da compatibilidade dos tipos de dados. A compatibilidade implica que a one-to-one correspondência de um determinado valor e um determinado tipo de dados nem sempre é necessária. Como alguns tipos de dados são compatíveis, uma conversão implícita, ou coerção, é possível. Para ter mais informações, consulte Tipos de conversão implícita. Quando os tipos de dados são incompatíveis, você pode às vezes converter um valor de um tipo de dados para outro usando uma função de conversão explícita.

Regras gerais de compatibilidade e conversão

Observe as seguintes regras de compatibilidade e conversão:

  • Em geral, tipos de dados que se enquadram no mesmo tipo de categoria (como diferentes tipos de dados numéricos) são compatíveis e podem ser implicitamente convertidos.

    Por exemplo, com a conversão implícita você pode inserir um valor decimal em uma coluna de número inteiro. O decimal é arredondado para produzir um número inteiro. Ou você pode extrair um valor numérico, tal como 2008, a partir de uma data e inserir este valor uma coluna de inteiro.

  • Os tipos de dados numéricos impõem condições de estouro que ocorrem quando você tenta inserir valores. out-of-range Por exemplo, um valor decimal com uma precisão de 5 não se enquadra em uma coluna decimal que foi definida com uma precisão de 4. Um número inteiro ou a parte inteira de um decimal nunca é truncada. No entanto, a parte fracionária de um decimal pode ser arredondada para cima ou para baixo, conforme apropriado. Contudo, os resultados de conversões explícitas dos valores selecionados a partir de tabelas não são arredondados.

  • Diferentes tipos de cadeias de caracteres são compatíveis. As sequências de colunas VARCHAR contendo dados de byte único e as sequências de colunas CHAR são comparáveis e implicitamente conversíveis. Strings VARCHAR que contêm dados de multibyte não são comparáveis. Além disso, você pode converter uma sequência de caracteres em uma data, hora, carimbo de data/hora ou valor numérico se a sequência for um valor literal apropriado. Todos os espaços à esquerda ou à direita são ignorados. Por outro lado, você pode converter uma data, hora, timestamp ou valor numérico em uma sequência de caracteres de comprimento fixo ou variável.

    nota

    Uma string de caracteres que você queira converter em um tipo numérico deve conter uma representação de caractere de um número. Por exemplo, você pode converter as strings '1.0' ou '5.9' em valores decimais, mas não pode converter a string 'ABC' em nenhum tipo numérico.

  • Se você comparar valores DECIMAIS com cadeias de caracteres, AWS Clean Rooms tentará converter a cadeia de caracteres em um valor DECIMAL. Ao comparar todos os outros valores numéricos com strings de caracteres, os valores numéricos são convertidos em strings de caracteres. Para impor a conversão oposta (por exemplo, converter strings de caracteres em números inteiros ou converter valores do tipo DECIMAL em strings de caracteres), use uma função explícita, como Função CAST.

  • Para converter valores do tipo DECIMAL ou NUMERIC de 64 bits em uma precisão mais alta, você deve usar uma função de conversão explícita tal como CAST ou CONVERT.

  • Ao converter DATE ou TIMESTAMP em TIMESTAMP ou converter TIME em TIMETZ, o fuso horário é definido para o fuso horário da sessão atual. O fuso horário da sessão é UTC por padrão.

  • Da mesma forma, TIMESTAMPTZ é convertido em DATE, TIME ou TIMESTAMP com base no fuso horário da sessão atual. O fuso horário da sessão é UTC por padrão. Após a conversão, as informações de fuso horário são removidas.

  • As strings de caracteres que representam um timestamp com fuso horário especificado são convertidas em TIMESTAMPTZ usando o fuso horário da sessão atual, que é UTC por padrão. Da mesma forma, strings de caracteres que representam uma hora com fuso horário especificado são convertidas em TIMETZ usando o fuso horário da sessão atual, que é UTC por padrão.

Tipos de conversão implícita

Há dois tipos de conversão implícita:

  • Conversões implícitas em atribuições, como definir valores em comandos INSERT ou UPDATE

  • Conversões implícitas em expressões, como realizar comparações na cláusula WHERE

A tabela a seguir lista os tipos de dados que podem ser convertidos implicitamente em atribuições ou expressões. Você também pode usar uma função de conversão explícita para realizar essas conversões.

Do tipo Para o tipo
BIGINT BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER
REAL (FLOAT4)
SMALLINT
VARCHAR
CHAR VARCHAR
DATA CHAR
VARCHAR
TIMESTAMP
TIMESTAMPTZ
DECIMAL (NUMERIC) BIGINT
CHAR
DOUBLE PRECISION (FLOAT8)
INTEGER INT)
REAL (FLOAT4)
SMALLINT
VARCHAR
DOUBLE PRECISION (FLOAT8) BIGINT
CHAR
DECIMAL (NUMERIC)
INTEGER (INT)
REAL (FLOAT4)
SMALLINT
VARCHAR
INTEGER (INT) BIGINT
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
REAL (FLOAT4)
SMALLINT
VARCHAR
REAL (FLOAT4) BIGINT
CHAR
DECIMAL (NUMERIC)
INTEGER (INT)
SMALLINT
VARCHAR
SMALLINT BIGINT
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER (INT)
REAL (FLOAT4)
VARCHAR
TIMESTAMP CHAR
DATA
VARCHAR
TIMESTAMPTZ
TIME
TIMESTAMPTZ CHAR
DATA
VARCHAR
TIMESTAMP
TIMETZ
TIME VARCHAR
TIMETZ
TIMETZ VARCHAR
TIME
nota

As conversões implícitas entre TIMESTAMPTZ, TIMESTAMP, DATE, TIME, TIMETZ ou strings de caracteres usam o fuso horário da sessão atual.

O tipo de dados VARBYTE não pode ser convertido explicitamente em outro tipo de dados. Para ter mais informações, consulte Função CAST.