Det finns inget standardvärde för en CAST:
En typcast specificerar en konvertering från en datatyp till en annan. PostgreSQL accepterar två ekvivalenta syntaxer för typcasts:
CAST ( expression AS type ) expression::type
Det finns inget utrymme i syntaxen för något annat än uttrycket som ska castas och önskad måltyp.
Du kan dock göra det för hand med en enkel funktion:
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;
Sedan kan du säga saker som cast_to_int('pancakes', 0)
och få 0
.
PostgreSQL låter dig också skapa dina egna casts så att du kan göra så här:
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);
Då kan man säga
select cast('pancakes'::text as integer)
och få 0
eller så kan man säga
select cast(some_text_column as integer) from t
och få 0
för some_text_column
värden som inte är giltiga heltal. Om du ville gjuta varchar
Om du använder denna automatiska förinställda cast måste du dubbelcasta:
select cast(some_varchar::text as integer) from t
Bara för att du kan göra detta gör det inte till en bra idé. Jag tror inte att det är den bästa idén någonsin att ersätta standardtexten till heltalscast. Ovanstående tillvägagångssätt kräver också att du lämnar standarden varchar
till integer
casting ensam, du skulle kunna komma runt det om du ville göra hela konverteringen själv istället för att slö till den inbyggda castingen.
NULL-hantering lämnas som en (lätt) övning för läsaren.