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

1日を日時フィールドに一致させるにはどうすればよいですか?

    タイムスタンプをキャストします dateへの値 単純な構文が必要な場合。このように:

    SELECT *
    FROM   tbl
    WHERE  timestamp_col::date = '2011-12-01';  -- date literal
    

    ただし、大きなテーブルを使用すると、これは高速になります:

    SELECT *
    FROM   tbl
    WHERE  timestamp_col >= '2011-12-01 0:0'    -- timestamp literal
    AND    timestamp_col <  '2011-12-02 0:0';
    

    理由:2番目のクエリは、テーブル内のすべての値を変換する必要はなく、タイムスタンプ列の単純なインデックスを利用できます。式は仮可能です。

    上限を除外していることに注意してください( < <=の代わりに )正しい選択のために。
    次のような式にインデックスを作成することで、それを補うことができます:

    CREATE INDEX tbl_ts_date_idx ON tbl (cast(timestamp_col AS date));
    

    そうすれば、クエリの最初のバージョンは可能な限り高速になります。



    1. システム内の役割とステータスの管理

    2. Postgresqlの複数の列でWHEREINを実行する

    3. UPDATEFROM句のGROUPBY

    4. ストアドプロシージャから複数の行を返す方法は? (Oracle PL / SQL)