PostgreSQL で 2 つの日付または datetime(timestamp) の差を時間単位で取得するには、単純な差の記号 (減算) を使用します。PostgreSQL で 2 つの日付の差を時間単位で取得する回りくどい方法として、エポックを指定した age() 関数を使用することもできます。2 つのアプローチの例をすべて見てみましょう。また、PostgreSQL の hours テーブルで 2 つの日付または datetime(timestamp) 列の差を取得する方法の例も検討します。

2 つの日時 (タイムスタンプ) の時間差単純な差分を使用する PostgreSQL:

単純な差分記号は、以下に示すように、2 つの日付の差を時間単位で計算するために使用されます。

例1:

SELECT round(abs('2024-04-01 09:12:00' :: date - '2020-04-14 09:12:00' :: date)*(24),2) as hours_diff;

出力:

2 つの日時 (タイムスタンプ) の時間単位の差 - PostgreSQL 0

2 つの日時 (タイムスタンプ) 列の時間単位の差PostgreSQL:

方法1

この例では、以下の Student_detail2 テーブルを使用して、PostgreSQL で 2 つの日付列の時間単位の差を見つける方法を説明します。

Student_detail2:

2 つの日時 (タイムスタンプ) の時間単位の差 - PostgreSQL 2

単純な差分シンボルは、以下に示すように、PostgreSQL テーブル内の 2 つの日付列の差を時間単位で計算するために使用されます。

select *,round(abs(birthdaytime :: date - examdatetime :: date)*(24),2) as hours_diff from student_detail2;

2つの日付列を日付に型変換し、その差を計算して時間数に変換したので、切り捨てられます。

出力:

2 つの日時 (タイムスタンプ) の時間単位の差 - PostgreSQL 3

2 つの日時 (タイムスタンプ) の時間差AGE() 関数を使用する PostgreSQL:

AGE() 関数では、日付の差を計算する必要がある 2 つの日付を渡し、結果を 86400 で割ります。さらに、PostgreSQL で 2 つの日付の差を時間単位で計算する date_part() 関数を使用します。

例1:

SELECT COALESCE(round(abs((EXTRACT(epoch from age('2024-04-01 09:12:00', '2020-04-14 09:12:00')) / 86400)::int),2)::int + DATE_PART('month', age('2024-04-01 09:12:00', '2020-04-14 09:12:00'))::float*0.454545::float)*24 as hours_diff

出力:

2 つの日時 (タイムスタンプ) の時間単位の差 - PostgreSQL 1

2 つの日時 (タイムスタンプ) 列の時間単位の差PostgreSQL EXTRACT() を使用する:

この例では、以下の Student_detail2 テーブルを使用して、PostgreSQL で 2 つの日付列の時間単位の差を見つける方法を説明します。

Student_detail2:

2 つの日時 (タイムスタンプ) の時間単位の差 - PostgreSQL 2

EXTRACT() 関数内で、日付の差を計算する必要がある 2 つの日付列を渡します。これは、EPOCH 関数と Age() 関数、および PostgreSQL の 2 つの日付列の差を時間単位で計算する date_part() を使用します。

SELECT *,COALESCE(round(abs((EXTRACT(epoch from age(examdatetime::date, birthdaytime::date)) / 86400)::INT),2)::int + DATE_PART('month', age(examdatetime::date, birthdaytime::date))::float*0.454545::float)*24 as hours_diff  from student_detail2;

列の差を時間単位で計算したので、結果の表は次のようになります。

出力:

2 つの日時 (タイムスタンプ) の時間単位の差 - PostgreSQL 3