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.