Er is geen standaardwaarde voor een CAST:
Een typecast specificeert een conversie van het ene gegevenstype naar het andere. PostgreSQL accepteert twee equivalente syntaxis voor typecasts:
CAST ( expression AS type )
expression::type
Er is geen ruimte in de syntaxis voor iets anders dan de te casten uitdrukking en het gewenste doeltype.
U kunt het echter met de hand doen met een eenvoudige functie:
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;
Dan kun je dingen zeggen als cast_to_int('pancakes', 0)
en krijg 0
.
Met PostgreSQL kun je ook je eigen casts maken, zodat je dit soort dingen kunt doen:
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);
Dan zou je kunnen zeggen
select cast('pancakes'::text as integer)
en krijg 0
of je zou kunnen zeggen
select cast(some_text_column as integer) from t
en krijg 0
voor de some_text_column
waarden die geen geldige gehele getallen zijn. Als je varchar
. wilt casten Als u deze automatisch standaard cast gebruikt, moet u dubbel casten:
select cast(some_varchar::text as integer) from t
Dat je dit kunt, maakt het nog geen goed idee. Ik denk niet dat het vervangen van de standaardtekst naar integer cast het beste idee ooit is. De bovenstaande aanpak vereist ook dat je de standaard varchar
. verlaat naar integer
alleen casten, je zou daar omheen kunnen als je de hele conversie zelf wilde doen in plaats van lui naar de ingebouwde casting te gaan.
NULL-afhandeling wordt overgelaten als een (gemakkelijke) oefening voor de lezer.