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)