PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Postgres:tentukan nilai default untuk kegagalan CAST?

Tidak ada nilai default untuk CAST:

Tipe cast menentukan konversi dari satu tipe data ke tipe data lainnya. PostgreSQL menerima dua sintaks yang setara untuk tipe gips:

CAST ( expression AS type )
expression::type

Tidak ada ruang dalam sintaks untuk apa pun selain ekspresi yang akan dicor dan jenis target yang diinginkan.

Namun, Anda dapat melakukannya dengan tangan dengan fungsi sederhana:

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;

Kemudian Anda dapat mengatakan hal-hal seperti cast_to_int('pancakes', 0) dan dapatkan 0 .

PostgreSQL juga memungkinkan Anda membuat gips sendiri sehingga Anda dapat melakukan hal-hal seperti ini:

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

Maka Anda bisa mengatakan

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

dan dapatkan 0 atau bisa dibilang

select cast(some_text_column as integer) from t

dan dapatkan 0 untuk some_text_column nilai yang bukan bilangan bulat yang valid. Jika Anda ingin menggunakan varchar s menggunakan pemeran default otomatis ini maka Anda harus menggandakan pemeran:

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

Hanya karena Anda bisa melakukan ini bukan ide yang bagus. Saya tidak berpikir mengganti teks standar menjadi integer cast adalah ide terbaik yang pernah ada. Pendekatan di atas juga mengharuskan Anda untuk meninggalkan varchar standar ke integer casting sendiri, Anda dapat menyiasatinya jika ingin melakukan seluruh konversi sendiri daripada malas-malasan menggunakan casting bawaan.

Penanganan NULL dibiarkan sebagai latihan (mudah) bagi pembaca.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mengakses alias kolom di klausa where di postgresql

  2. Apa yang dijelaskan PostgreSQL kepada saya dengan tepat?

  3. Bagaimana Cosd() Bekerja di PostgreSQL

  4. Bagaimana cara saya memilih nilai non-null sebelumnya secara efisien?

  5. Bergabunglah dengan Kolom Alias ​​​​SQL