Non esiste un valore predefinito per un CAST:
Un cast di tipo specifica una conversione da un tipo di dati a un altro. PostgreSQL accetta due sintassi equivalenti per i cast dei tipi:
CAST ( expression AS type )
expression::type
Non c'è spazio nella sintassi per nient'altro che l'espressione da trasmettere e il tipo di destinazione desiderato.
Tuttavia, puoi farlo a mano con una semplice funzione:
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;
Quindi puoi dire cose come cast_to_int('pancakes', 0)
e ottieni 0
.
PostgreSQL ti consente anche di creare i tuoi cast in modo da poter fare cose come questa:
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);
Allora potresti dire
select cast('pancakes'::text as integer)
e ottieni 0
oppure potresti dire
select cast(some_text_column as integer) from t
e ottieni 0
per la some_text_column
valori che non sono interi validi. Se vuoi lanciare varchar
Se utilizzi questo cast con impostazione predefinita automatica, dovresti raddoppiare il cast:
select cast(some_varchar::text as integer) from t
Solo perché puoi farlo non è una buona idea. Non credo che sostituire il testo standard con il cast intero sia la migliore idea di sempre. L'approccio di cui sopra richiede anche di lasciare lo standard varchar
a integer
cast da solo, potresti aggirarlo se volessi eseguire l'intera conversione da solo piuttosto che andare pigramente al casting integrato.
La gestione di NULL viene lasciata come un esercizio (facile) per il lettore.