SQL Server で 2 つのタイムスタンプの差を計算する 3 つの方法
SQL Server で 2 つの行のタイム差を計算する方法
SQL Server で 2 つの行のタイム差を計算するには、いくつかの方法があります。最も一般的な方法は、DATEDIFF
関数を使用する方法です。この関数は、2 つの値間の差を、日、時、分、秒などの指定された日付パーツで返します。
例
次の例では、startTime
と endTime
という 2 つの列を持つ Events
テーブルがあると仮定します。これらの列には、それぞれイベントの開始時刻と終了時刻が格納されています。以下のクエリは、各イベントの持続時間を計算します。
SELECT
eventName,
startTime,
endTime,
DATEDIFF(SECOND, startTime, endTime) AS durationInSeconds
FROM Events;
このクエリは、次の結果を返します。
eventName | startTime | endTime | durationInSeconds
---------+-------------------------+-------------------------+---------------------
Event 1 | 2023-01-01 09:00:00.000 | 2023-01-01 10:00:00.000 | 3600
Event 2 | 2023-01-02 13:00:00.000 | 2023-01-02 14:30:00.000 | 5400
DATEDIFF
関数以外にも、2 つの行のタイム差を計算するには、次のような方法があります。
TIMESTAMP_DIFF
関数:この関数は、2 つの値間の差を、秒、マイクロ秒、ナノ秒などの指定された時間単位で返します。- 計算式:2 つの値を直接引き算することで、タイム差を計算できます。ただし、この方法を使用するには、両方の値が同じ時間単位であることを確認する必要があります。
ヒント
- タイム差をより人間にわかりやすい形式で表示するには、
DATEFORMAT
関数を使用できます。 - 特定の条件に一致する行のみのタイム差を計算するには、
WHERE
句を使用できます。
SELECT
eventName,
startTime,
endTime,
DATEDIFF(SECOND, startTime, endTime) AS durationInSeconds
FROM Events;
eventName | startTime | endTime | durationInSeconds
---------+-------------------------+-------------------------+---------------------
Event 1 | 2023-01-01 09:00:00.000 | 2023-01-01 10:00:00.000 | 3600
Event 2 | 2023-01-02 13:00:00.000 | 2023-01-02 14:30:00.000 | 5400
説明
SELECT
句は、eventName
、startTime
、endTime
、およびdurationInSeconds
列を取得することを指定します。FROM
句は、Events
テーブルからデータを取得することを指定します。DATEDIFF
関数は、startTime
列とendTime
列の値の差を秒単位で計算します。AS
キーワードは、durationInSeconds
というエイリアスを計算結果に割り当てます。
- このコードは、
Events
テーブルにstartTime
とendTime
という列があることを前提としています。これらの列がない場合は、クエリを修正する必要があります。
代替方法
TIMESTAMP_DIFF
関数:この関数は、DATEDIFF
関数と似ていますが、より高い精度を提供します。秒だけでなく、マイクロ秒やナノ秒などのより小さな時間単位での差を計算できます。
SELECT
eventName,
startTime,
endTime,
TIMESTAMP_DIFF(MICROSECOND, startTime, endTime) AS durationInMicroseconds
FROM Events;
SELECT
eventName,
startTime,
endTime,
endTime - startTime AS duration
FROM Events;
上記の代替方法は、それぞれ長所と短所があります。最適な方法は、特定のニーズによって異なります。
- マイクロ秒またはナノ秒単位の精度が必要な場合は、
TIMESTAMP_DIFF
関数を使用する必要があります。 - 計算式の方がシンプルでわかりやすい場合は、計算式を使用できます。
sql-server database difference-between-rows