sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLで2つのタイムスタンプの差を計算する方法

    問題:

    タイプがtimestampの2つの列があります そして、それらの間の差を計算したい。

    例:

    travel テーブルには、次の3つの列があります:iddeparture 、およびarrivalarrivalの差を計算したい およびdeparture

    travel テーブルは次のようになります:

    id 出発 到着
    1 2018-03-25 12:00:00 2018-04-05 07:30:00
    2 2019-09-12 15:50:00 2019-10-23 10:30:30
    3 2018-07-14 16:15:00 2018-07-14 20:40:30
    4 2018-01-05 08:35:00 2019-01-08 14:00:00

    ソリューション1(日、時間、分、秒の違い):

    SELECT
      id,
      departure,
      arrival,
      arrival - departure AS difference
    FROM travel;
    

    結果は次のとおりです。

    id 出発 到着 違い
    1 2018-03-25 12:00:00 2018-04-05 07:30:00 10日19:30:00
    2 2019-09-12 15:50:00 2019-10-23 10:30:30 40日18:40:30
    3 2018-07-14 16:15:00 2018-07-14 20:40:30 04:25:30
    4 2018-01-05 08:35:00 2019-01-08 14:00:00 368日05:25:00

    ディスカッション:

    PostgreSQLのタイムスタンプ間の差を計算するには、終了タイムスタンプから開始タイムスタンプを引くだけです。ここでは、arrival - departureになります 。違いはタイプintervalになります 、つまり、日、時間、分、秒で表示されます。

    ソリューション2(年、月、日、時間、分、秒の違い):

    SELECT
      id,
      departure,
      arrival,
      AGE(arrival, departure) AS difference
    FROM travel;
    

    結果は次のとおりです。

    id 出発 到着 違い
    1 2018-03-25 12:00:00 2018-04-05 07:30:00 10日19:30:00
    2 2019-09-12 15:50:00 2019-10-23 10:30:30 1月10日18:40:30
    3 2018-07-14 16:15:00 2018-07-14 20:40:30 04:25:30
    4 2018-01-05 08:35:00 2019-01-08 14:00:00 1年3日05:25:00

    ディスカッション:

    年、月、日、時間、分、秒の差を取得したい場合は、AGE(end, start)を使用してください 働き。ここでは、AGE(arrival, departure)になります 。このソリューションでは、結果の列もintervalタイプです。 。

    ソリューション3(秒単位の差):

    SELECT
      id,
      departure,
      arrival,
      EXTRACT(EPOCH FROM (arrival - departure)) AS difference
    FROM travel;
    
    id 出発 到着 違い
    1 2018-03-25 12:00:00 2018-04-05 07:30:00 934200
    2 2019-09-12 15:50:00 2019-10-23 10:30:30 3523230
    3 2018-07-14 16:15:00 2018-07-14 20:40:30 15930
    4 2018-01-05 08:35:00 2019-01-08 14:00:00 31814700

    ディスカッション:

    PostgreSQLでタイムスタンプの差を秒単位で計算する場合は、一方の日付をもう一方の日付から減算します(ここでは、arrival - departure )次に、EPOCHを抽出します 違いから数秒で取得します。 EXTRACT()の詳細はこちら 機能。


    1. mysqliプリペアドステートメントでnullを使用する

    2. SQLServerで一度に複数の列を変更する方法

    3. MySQLですべてのビューを一覧表示する4つの方法

    4. MySQL MariaDB –一時テーブルを使用したクエリ