CASTのデフォルト値はありません:
型キャストは、あるデータ型から別のデータ型への変換を指定します。 PostgreSQLは、型キャストに対して2つの同等の構文を受け入れます。
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
キャストだけで、組み込みのキャストに怠惰にパントするのではなく、自分で変換全体を実行したい場合は、それを回避できます。
NULL処理は、読者にとって(簡単な)演習として残されています。