Es gibt keinen Standardwert für einen CAST:
Eine Typumwandlung gibt eine Konvertierung von einem Datentyp in einen anderen an. PostgreSQL akzeptiert zwei äquivalente Syntaxen für Typumwandlungen:
CAST ( expression AS type )
expression::type
In der Syntax ist kein Platz für etwas anderes als den umzuwandelnden Ausdruck und den gewünschten Zieltyp.
Sie können dies jedoch mit einer einfachen Funktion von Hand tun:
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;
Dann können Sie Dinge wie cast_to_int('pancakes', 0)
sagen und erhalte 0
.
Mit PostgreSQL können Sie auch Ihre eigenen Umwandlungen erstellen, sodass Sie beispielsweise Folgendes tun können:
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);
Dann könnten Sie sagen
select cast('pancakes'::text as integer)
und erhalte 0
oder Sie könnten sagen
select cast(some_text_column as integer) from t
und erhalte 0
für die some_text_column
Werte, die keine gültigen Ganzzahlen sind. Wenn Sie varchar
umwandeln wollten Wenn Sie diese automatische Standardumwandlung verwenden, müssen Sie doppelt umwandeln:
select cast(some_varchar::text as integer) from t
Nur weil man das kann, ist es noch lange keine gute Idee. Ich glaube nicht, dass es die beste Idee ist, den Standardtext durch Integer-Cast zu ersetzen. Der obige Ansatz erfordert auch, dass Sie das standardmäßige varchar
beibehalten zu integer
allein gegossen, könnten Sie das umgehen, wenn Sie die gesamte Umwandlung selbst vornehmen wollten, anstatt faul zum eingebauten Gießen zu stechen.
Der Umgang mit NULL bleibt dem Leser als (leichte) Übung überlassen.