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

PostgreSQLでCTE(共通テーブル式)の列タイプを指定するにはどうすればよいですか?

    あなたの場合、VALUES式の中でタイプを指定する必要があると思います:

    WITH t (f0, f1) as (
      values 
         (1::bigint, 10::bigint),
         (2, 20)
    )...
    

    必要なのは最初の値のセットの型だけで、PostgreSQLは残りの値を推測できます。

    たとえば、次の2つの関数があるとします。

    create function f(bigint, bigint) returns bigint as $$
    begin
        raise notice 'bigint';
        return $1 * $2;
    end;
    $$ language plpgsql;
    
    create function f(int, int) returns int as $$
    begin
        raise notice 'int';
        return $1 * $2;
    end;
    $$ language plpgsql;
    

    次に

    WITH t (f0, f1) as (
        values
            (1, 10),
            (2, 20)
    )
    select f(f0, f1) from t;
    

    2つのintを提供します 気づきますが

    WITH t (f0, f1) as (
        values
            (1::bigint, 10::bigint),
            (2, 20)
    )
    select f(f0, f1) from t;
    

    あなたに2つのbigintを与えるでしょう 通知。



    1. 日時の値が正しくありません:'' 2012-07-14 23:00:00''

    2. 日付文字列を変換して検証するための最良の方法

    3. 2つのフィールドに「両面」の一意のインデックスを作成するにはどうすればよいですか?

    4. 最後の連続した行を見つける