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.