Não há valor padrão para um CAST:
Uma conversão de tipo especifica uma conversão de um tipo de dados para outro. O PostgreSQL aceita duas sintaxes equivalentes para conversão de tipos:
CAST ( expression AS type ) expression::type
Não há espaço na sintaxe para nada além da expressão a ser convertida e o tipo de destino desejado.
No entanto, você pode fazer isso manualmente com uma função simples:
create or replace function cast_to_int(text, integer) returns integer as $$
begin
return cast($1 as integer);
exception
when invalid_text_representation then
return $2;
end;
$$ language plpgsql immutable;
Então você pode dizer coisas como
cast_to_int('pancakes', 0)
e obtenha 0
. O PostgreSQL também permite que você crie seus próprios casts para que você possa fazer coisas assim:
create or replace function cast_to_int(text) returns integer as $$
begin
-- Note the double casting to avoid infinite recursion.
return cast($1::varchar as integer);
exception
when invalid_text_representation then
return 0;
end;
$$ language plpgsql immutable;
create cast (text as integer) with function cast_to_int(text);
Então você poderia dizer
select cast('pancakes'::text as integer)
e obtenha
0
ou você poderia dizer select cast(some_text_column as integer) from t
e obtenha
0
para a some_text_column
valores que não são inteiros válidos. Se você quiser converter varchar
s usando essa conversão padrão automática, você teria que fazer uma conversão dupla:select cast(some_varchar::text as integer) from t
Só porque você pode fazer isso não faz com que seja uma boa ideia. Eu não acho que substituir o texto padrão por conversão inteira seja a melhor ideia de todos os tempos. A abordagem acima também requer que você deixe o padrão
varchar
para integer
lançado sozinho, você poderia contornar isso se quisesse fazer toda a conversão sozinho, em vez de ir preguiçosamente para o elenco embutido. O manuseio de NULL é deixado como um exercício (fácil) para o leitor.