1. ホーム
  2. sql

[解決済み】PostgreSQLでタイムスタンプから日付(yyyy/mm/dd)を抽出する。

2022-03-27 17:38:31

質問

PostgreSQLでタイムスタンプから日付部分のみを抽出したいのですが、どうすればよいですか?

それをpostgresqlの DATE 型が必要な別のテーブルに挿入することができます。 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)を抽出する最も良い方法は何でしょうか?

どのように解決するのですか?

タイムスタンプを日付に変換するには、タイムスタンプの末尾に ::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)