PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres:Definieren Sie einen Standardwert für CAST-Fehler?

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.