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

SQLiteで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,
      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 (時間)。


    1. Oracle10gでピボット

    2. Java-前日として保存された日付

    3. クリックリスナーを使用してSQLiteデータベースのリストビューデータを更新および削除するにはどうすればよいですか?

    4. 親と無限の子を返すステートメントを選択します