sql >> Database >  >> RDS >> PostgreSQL

Postgres:een standaardwaarde definiëren voor CAST-fouten?

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.



  1. Fout tijdens het verzenden van QUERY-pakket

  2. Hoe to_char() werkt in PostgreSQL

  3. Hoe XML-bestand importeren in Oracle SQL Developer?

  4. MultipleActiveResultSets=True of meerdere verbindingen?