問題:
タイプがtimestampの2つの列があります そして、それらの間の差を計算したい。
例:
travel テーブルには、次の3つの列があります:id 、departure 、およびarrival 。 arrivalの差を計算したい および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()の詳細はこちら 機能。