sql >> データベース >  >> RDS >> PostgreSQL

Postgres:CASTエラーのデフォルト値を定義しますか?

    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処理は、読者にとって(簡単な)演習として残されています。



    1. Mysql列を行に変換(ピボットテーブル)

    2. SQLServerテーブルを別のファイルグループに移動する

    3. SEC_TO_TIME()の例– MySQL

    4. SQLエラー:ORA-02000:ID列ベースの表を作成するときにALWAYSキーワードがありません