Pro CAST:
neexistuje žádná výchozí hodnotaPřetypování typu určuje převod z jednoho datového typu na jiný. PostgreSQL přijímá dvě ekvivalentní syntaxe pro přetypování typu:
CAST ( expression AS type ) expression::type
V syntaxi není místo pro nic jiného než výraz, který má být přetypován, a požadovaný cílový typ.
Můžete to však udělat ručně pomocí jednoduché funkce:
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;
Pak můžete říct věci jako cast_to_int('pancakes', 0)
a získejte 0
.
PostgreSQL vám také umožňuje vytvářet vlastní casty, abyste mohli dělat věci jako je toto:
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);
Pak byste mohli říct
select cast('pancakes'::text as integer)
a získejte 0
nebo můžete říct
select cast(some_text_column as integer) from t
a získejte 0
pro some_text_column
hodnoty, které nejsou platnými celými čísly. Pokud jste chtěli přenést varchar
Pokud použijete toto automaticky výchozí přetypování, budete muset přetypovat dvakrát:
select cast(some_varchar::text as integer) from t
To, že to dokážete, z toho ještě nedělá dobrý nápad. Nemyslím si, že nahrazení standardního textu celočíselným přetypováním je vůbec nejlepší nápad. Výše uvedený přístup také vyžaduje, abyste opustili standardní varchar
na integer
casting alone, to by se dalo obejít, pokud byste chtěli udělat celou konverzi sami a ne líně prát na vestavěný casting.
Zpracování NULL je ponecháno jako (snadné) cvičení pro čtenáře.