PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgres:дефиниране на стойност по подразбиране за CAST неуспехи?

Няма стойност по подразбиране за CAST:

Прехвърлянето на тип определя преобразуване от един тип данни в друг. PostgreSQL приема два еквивалентни синтаксиса за привеждане на типове:

CAST ( expression AS type )
expression::type

В синтаксиса няма място за нищо друго освен израза, който трябва да бъде прехвърлен, и желания тип цел.

Можете обаче да го направите на ръка с проста функция:

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;

След това можете да кажете неща като cast_to_int('pancakes', 0) и вземете 0 .

PostgreSQL също ви позволява да създавате свои собствени предавания, за да можете да правите неща като това:

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

Тогава бихте могли да кажете

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

и вземете 0 или бихте могли да кажете

select cast(some_text_column as integer) from t

и вземете 0 за some_text_column стойности, които не са валидни цели числа. Ако искате да пуснете varchar Ако използвате това автоматично прехвърляне по подразбиране, тогава ще трябва да прехвърляте двойно:

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

Само защото можете да направите това, не го прави добра идея. Не мисля, че замяната на стандартния текст с цяло число е най-добрата идея. Горният подход изисква също да оставите стандартния varchar към integer само cast, можете да го заобиколите, ако искате сами да извършите цялото преобразуване, а не лениво да се насочвате към вграденото кастинг.

Обработката с NULL е оставена като (лесно) упражнение за читателя.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL транспониране на редове като колони

  2. Свързване с база данни PostgreSQL чрез SSH тунелиране в Python

  3. Относно полезността на индексите на изразяване

  4. Как да импортирам данни от CSV в таблица на Postgres с помощта на pgAdmin 3?

  5. Проследяване на висока наличност за PostgreSQL със сърдечен ритъм