問題:
タイプが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, JULIANDAY(arrival) - JULIANDAY(departure) AS difference FROM travel;
結果は次のとおりです。
id | 出発 | 到着 | 違い |
---|---|---|---|
1 | 2018-03-25 12:00:00 | 2018-04-05 07:30:00 | 10.8125 |
2 | 2019-09-12 15:50:00 | 2019-10-23 10:30:30 | 40.778125000186265 |
3 | 2018-07-14 16:15:00 | 2018-07-14 20:40:30 | 0.18437499972060323 |
4 | 2018-01-05 08:35:00 | 2019-01-08 14:00:00 | 368.2256944444962 |
ディスカッション:
SQLiteのタイムスタンプ間の差を計算するには、JULIANDAY()
を使用します 両方のタイムスタンプに対して機能し、一方を他方から減算します。このように、あなたは日数の違いを得る。差の整数部分は丸一日の数であり、小数部分は部分的な日を表します。
JULIANDAY()
関数は、紀元前4714年11月24日のグリニッジ標準時の正午からの日数を返します。この関数の詳細については、ドキュメントをご覧ください。
ソリューション2(秒単位の差):
SELECT id, departure, arrival, ROUND((JULIANDAY(arrival) - JULIANDAY(departure)) * 86400) 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 |
ディスカッション:
タイムスタンプの差を秒単位で計算する場合は、日単位の小数の差に1日の秒数を掛けます。これは、24 * 60 * 60 = 86400
に相当します。 、または1日の時間数、1時間の分数、および1分の秒数の積。丸め誤差のため、日数の差の小数部分は100%正確ではないため、ゼロ以外の小数部分が得られる場合があります。 ROUND()
を使用して、結果を最も近い整数に丸めます 機能、問題を修正します。
同様に、差を分単位または時間単位で計算できます。 * 86400 to * 3600
に変更するだけです (分)または* 60
(時間)。