sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres:definere en standardværdi for CAST-fejl?

Der er ingen standardværdi for en CAST:

Et typecast angiver en konvertering fra én datatype til en anden. PostgreSQL accepterer to ækvivalente syntakser for typecasts:

CAST ( expression AS type )
expression::type

Der er ikke plads i syntaksen til andet end udtrykket, der skal castes, og den ønskede måltype.

Du kan dog gøre det i hånden med en simpel 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;

Så kan du sige ting som cast_to_int('pancakes', 0) og få 0 .

PostgreSQL lader dig også oprette dine egne casts, så du kan gøre ting som dette:

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);

Så kunne man sige

select cast('pancakes'::text as integer)

og få 0 eller man kan sige

select cast(some_text_column as integer) from t

og få 0 for some_text_column værdier, der ikke er gyldige heltal. Hvis du ville kaste varchar Hvis du bruger denne automatiske standardcast, skal du dobbeltcaste:

select cast(some_varchar::text as integer) from t

Bare fordi du kan gøre dette, gør det det ikke til en god idé. Jeg tror ikke, at det er den bedste idé nogensinde at erstatte standardteksten med heltalscast. Ovenstående tilgang kræver også, at du forlader standarden varchar til integer cast alene, kunne du komme uden om det, hvis du ville lave hele konverteringen selv i stedet for dovent at satse på den indbyggede casting.

NULL-håndtering efterlades som en (let) øvelse for læseren.



  1. 2ndQuadrant Deutschland – Special Training Opening Bargain

  2. 15 Grundlæggende MySQL-interviewspørgsmål til databaseadministratorer

  3. Ret "FEJL 1136 (21S01):Kolonneantal stemmer ikke overens med værdiantallet i række 1", når du indsætter data i MySQL

  4. GROUP_CONCAT BESTIL AF