PostgreSQLのタイムスタンプから日付(yyyy/mm/dd)を抽出する 質問する

PostgreSQLのタイムスタンプから日付(yyyy/mm/dd)を抽出する 質問する

PostgreSQL のタイムスタンプから日付部分だけを抽出したい。

DATE値を期待する別のテーブルに挿入できるように、これを postgresql 型にする必要がありますDATE

例えば、2011/05/26 09:00:00私が を持っている場合、2011/05/26

キャストを試みましたが、2011 しか表示されません。

timestamp:date
cast(timestamp as date)

私はto_char()以下を試しましたto_date():

SELECT to_date(to_char(timestamp, 'YYYY/MM/DD'), 'YYYY/MM/DD') 
FROM val3 WHERE id=1;

関数にしてみました:

CREATE OR REPLACE FUNCTION testing() RETURNS void AS '
DECLARE i_date DATE;
BEGIN
    SELECT to_date(to_char(val1, "YYYY/MM/DD"),"YYYY/MM/DD") 
      INTO i_date FROM exampTable WHERE id=1;
    INSERT INTO foo(testd) VALUES (i);
END

PostgreSQL のタイムスタンプから日付 (yyyy/mm/dd) を抽出する最適な方法は何ですか?

ベストアンサー1

タイムスタンプに を接尾辞として付けると、タイムスタンプを日付に変換できます::date。ここでは、psql ではタイムスタンプは次のようになります。

# select '2010-01-01 12:00:00'::timestamp;
      timestamp      
---------------------
 2010-01-01 12:00:00

次に、それを日付にキャストします。

wconrad=# select '2010-01-01 12:00:00'::timestamp::date;
    date    
------------
 2010-01-01

一方、date_trunc関数を使用することもできます。両者の違いは、後者はタイムゾーンをそのまま維持するなど、同じデータ型を返すことですtimestamptz(必要な場合)。

=> select date_trunc('day', now());
       date_trunc
------------------------
 2015-12-15 00:00:00+02
(1 row)

おすすめ記事