Casts explícita e implícita
A cast implícita é o uso de regras internas para tentar avaliar e processar as instruções que contêm tipos de dados combinados. Isso pode ser útil quando se usa uma função que espera um tipo de dados específico ou quando se emite uma consulta que compara os valores que são semelhantes, mas de tipos de dados diferentes. A linguagem SQL Netezza Performance Server está alinhada com o padrão SQL para conversão implícita de tipos de dados.
Por exemplo, na instrução a seguir, as duas expressões podem ser nomes de colunas, literais ou expressões mais complexas:
SELECT * FROM tbl WHERE <character expression> > <integer expression>;Como uma expressão de caracteres está sendo comparada a uma expressão de números inteiros, a expressão de caractere sofre cast implícita como número inteiro.Às vezes a cast implícita falha porque os dados não podem ser analisados de uma maneira que fiquem de acordo com o novo tipo de dados. (Por exemplo, a sequência de caracteres 'abc' não pode ser analisada como um número inteiro ou uma data.) Nesses casos, use a função
cast para fazer cast explícita para o tipo de dados apropriado. Por exemplo, se a coluna age contiver dados de caracteres que representam valores de número inteiro, faça cast dos dados como dados de número inteiro, como a seguir:SELECT * FROM tbl WHERE cast(age as integer) > 3;Exemplos de mensagens de erro que são emitidas quando a cast implícita falha:
- Quando uma expressão não pode ser analisada como um número inteiro:
ERROR: pg_atoi: error in "abc": can't parse "abc"
- Quando uma expressão de caracteres não pode ser analisada como um valor de data:
ERROR: Bad date external representation 'abc'
Esse erro pode ser o resultado de instruções como:SELECT * FROM tbl WHERE <date expression> = <character expression>;INSERT INTO <table having one column of type date> SELECT <character expression> FROM <another table>;
- Quando uma expressão de caracteres não pode ser analisada como um valor numérico:
ERROR: 65524: Precision range error
Por exemplo, quando uma expressão tenta multiplicar um numeric(24,4) por um varchar(50), o sistema tenta fazer cast implícito do varchar para um numeric(24,4). No entanto, se o varchar contiver muitos dígitos, isso pode causar um erro de intervalo de precisão.