PostgreSQL - 今日を基準とした日付と時刻を確認する

Bilal Shahid 2023年6月20日
  1. PostgreSQL - 今日を基準とした日付と時刻を確認する
  2. PostgreSQL NOW() 関数
PostgreSQL - 今日を基準とした日付と時刻を確認する

このチュートリアルでは、PostgreSQL で今日を基準とした日付と時刻を確認する方法を示します。

PostgreSQL - 今日を基準とした日付と時刻を確認する

PostgreSQL を使用している間、ユーザーはクエリで今日を基準とした日付を使用する必要性に直面することがよくあります。 PostgreSQL は、現在の時刻と日付を取得するための効率的な関数とメソッドを提供します。

今日を基準とした日付と時刻を確認する場合、適切な手順に従うと、現在の地域を変更して別のタイムスタンプを取得するのに役立ちます。 一部の関数はタスクを完了しますが、それらを正確に使用するには機能を理解することが不可欠です。

以下の NOW() 関数から始めましょう。

PostgreSQL NOW() 関数

クエリで現在の日付と時刻を使用する必要がある場合は、NOW() 関数が機能して正確にそれが得られます。 出力として、NOW() の戻り値の型は timestamp で、タイムゾーンは次のようになります:

SELECT NOW();

出力:

2022-09-14 13:21:36.175627+07

NOW() 関数は、データベースのサーバーに設定されたタイムゾーンに基づいて現在の日付と時刻を返す必要があります。 たとえば、タイムゾーンをロサンゼルスに設定すると、関数はロサンゼルスの現在の時刻と日付を返します。

次の例に表示されます。

SET TIMEZONE='America/Los_angeles';
SELECT NOW();

出力:

2022-09-14 02:16:21.759315-07

上記の例では、NOW() の戻り値は、割り当てられた新しいタイムゾーンに調整された今日の現在の日付と時刻です。 次のように明示的にキャストすると、タイムゾーンなしで今日の PostgreSQL の現在の日付と時刻を取得することもできます。

SELECT NOW()::timestamp;

出力:

2022-09-14 02:16:21.324535

NOW() 関数は非常に柔軟です。 未来からデータと時間を取得できます。 次の例を参照してください。

SELECT (NOW() + interval '1 hour') AS after_one_hour;

出力:

2022-09-14 03:16:21.759315-07

この機能は時間に限定されません。 数日や数分に延長できます。 次のコード スニペットを参照してください。

SELECT (NOW() + interval '1 day') AS after_one_day;

出力:

2022-09-15 02:16:21.743315-07

以下は、別のコード ブロックです。

SELECT (NOW() - interval '4 hours 15 minutes') AS after_fourhrs_15min;

出力:

2022-09-14 10:01:21.776315-07

NOW() 関数をデフォルト値として使用する

データベース テーブルを作成する際、NOW() を任意のテーブル カラムのデフォルト値として使用できます。 まず、created_at 列を含む新しいテーブルを作成します。 NOW() 関数のデフォルト値に設定します。

CREATE TABLE table_name( 
    created_at TIMESTAMPTZ DEFAULT NOW()
);

テーブルの列にデータを挿入し、SELECT コマンドで表示すると、created_at 列はすべてのデータ エントリのタイムスタンプを示します。

PostgreSQL における NOW() の代替案

NOW() 関数以外にも、タイムゾーンとともに現在の日付と時刻を取得するために使用できる関数がいくつかあります。 NOW() 関数と同様の結果を得るには、CURRENT_TIME または CURRENT_TIMESTAMP 関数を使用します。

次の方法で使用できます。

SELECT CURRENT_TIMESTAMP, CURRENT_TIME;

出力:

2022-09-14 02:16:21.759315-07 | 02:16:21.759315-07

LOCALTIMELOCALTIMESTAMP などの関数を使用して、タイムゾーンなしで現在のタイムスタンプを取得することもできます。

SELECT LOCALTIMESTAMP, LOCALTIME;

出力:

2022-09-14 02:16:21.759315 | 02:16:21.759315

時間ではなく日付のみを気にするイベントがある場合は、CURRENT_DATENOW() に置き換えると、次のようになります。

SELECT * FROM tablename where dateval > NOW() -interval '1 year';

CURRENT_DATE に置き換えます。

SELECT * FROM tablename where dateval > CURRENT_DATE() -interval '1 year';

時刻ではなく、日付のみを返します。 NOW() および上記のすべての関連関数は、現在のトランザクションの開始時刻を返します。 この関数の戻り値は、トランザクション内と同じです。

次の例は、誤解を解くかもしれません。

postgres =# BEGIN;
BEGIN
postgres=# SELECT NOW();
2022-09-14 02:16:21.759315-07 //output
postgres=# SELECT pg_sleep(2);
postgres=# SELECT NOW();
2022-09-14 02:16:21.759315-07 //output
postgres=# COMMIT
COMMIT

ここでは、トランザクション全体で関数を呼び出しますが、戻り値は毎回変わるわけではありません。

ただし、トランザクション全体で更新される現在の日付と時刻が必要な場合は、TIMEOFDAY がそれを可能にします。 たとえば、上記のトランザクションと同じコードを実行すると、現在の日付と時刻は pg_sleep の後に 2 秒間増加します。

したがって、このチュートリアルが、NOW() 関数に役立つ複数の関数とそれらの実行方法を学ぶのに役立つことを願っています。

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

関連記事 - PostgreSQL Date