DATEDIFF()とTIMEDIFF()関数で日付差と時間差を計算
MySQLで2つの日時差を計算する方法
日付差のみを計算したい場合:
- DATEDIFF()関数を使用します。これは、2つの日付間の差を日数で返します。
例:
SELECT DATEDIFF('2024-04-10', '2024-03-08');
この例では、2024年4月10日と2024年3月8日の差は32日であることが分かります。
SELECT TIMEDIFF('2024-04-10 12:34:56', '2024-04-10 10:23:45');
この例では、2024年4月10日12時34分56秒と2024年4月10日10時23分45秒の差は2時間11分11秒であることが分かります。
より複雑な差分計算:
- 複数の
DATEDIFF()
やTIMEDIFF()
関数を組み合わせて使用できます。 - INTERVAL演算子を使用して、日付や時刻に間隔を加減できます。
SELECT DATEDIFF('2024-04-10', '2024-03-08') + 1; -- 33日
SELECT TIMEDIFF('2024-04-10 12:34:56', '2024-04-10 10:23:45') + INTERVAL 1 HOUR; -- 3時間11分11秒
注意点:
- 2つの日時が同じタイムゾーンであることを確認する必要があります。
DATEDIFF()
関数は、日付のみを比較するため、時間の差は考慮されません。
日付差のみを計算
-- 2024年4月10日と2024年3月8日の差
SELECT DATEDIFF('2024-04-10', '2024-03-08');
-- 2023年12月31日と2024年1月1日の差
SELECT DATEDIFF('2023-12-31', '2024-01-01');
-- 2024年4月10日と2025年4月10日の差
SELECT DATEDIFF('2024-04-10', '2025-04-10');
時間差も含めて計算
-- 2024年4月10日12時34分56秒と2024年4月10日10時23分45秒の差
SELECT TIMEDIFF('2024-04-10 12:34:56', '2024-04-10 10:23:45');
-- 2024年4月10日12時00分00秒と2024年4月11日12時00分00秒の差
SELECT TIMEDIFF('2024-04-10 12:00:00', '2024-04-11 12:00:00');
-- 2024年4月10日00時00分00秒と2024年4月10日23時59分59秒の差
SELECT TIMEDIFF('2024-04-10 00:00:00', '2024-04-10 23:59:59');
複雑な差分計算
-- 2024年4月10日から33日後の日付
SELECT DATE_ADD('2024-04-10', INTERVAL DATEDIFF('2024-04-10', '2024-03-08') + 1 DAY);
-- 2024年4月10日12時34分56秒から2時間11分11秒経過後の日時
SELECT DATE_ADD('2024-04-10 12:34:56', INTERVAL TIMEDIFF('2024-04-10 12:34:56', '2024-04-10 10:23:45') + INTERVAL 1 HOUR);
-- 2024年4月10日12時00分00秒から1週間後の同じ時間
SELECT DATE_ADD('2024-04-10 12:00:00', INTERVAL 1 WEEK);
その他の2つの日時差を計算する方法
UNIXタイムスタンプを使用する方法
2つの日時の差を計算するには、以下の手順で実行します。
- それぞれの日時を
UNIX_TIMESTAMP()
関数でUNIXタイムスタンプに変換します。 - 2つのUNIXタイムスタンプの差を計算します。
SELECT UNIX_TIMESTAMP('2024-04-10 12:34:56') - UNIX_TIMESTAMP('2024-04-10 10:23:45');
- UNIXタイムスタンプは、タイムゾーンの影響を受けません。
- 計算結果は秒単位で表示されます。
SUBSTRING()
関数を使用して、文字列から部分文字列を抽出できます。この方法では、日時を文字列として扱い、以下の手順で差を計算します。
- それぞれの日時文字列から、年、月、日、時、分、秒の部分文字列を抽出します。
- それぞれの部分文字列を数値に変換します。
- それぞれの数値の差を計算します。
SELECT
SUBSTRING('2024-04-10 12:34:56', 1, 4) - SUBSTRING('2024-03-08', 1, 4) AS year_diff,
SUBSTRING('2024-04-10 12:34:56', 6, 2) - SUBSTRING('2024-03-08', 6, 2) AS month_diff,
SUBSTRING('2024-04-10 12:34:56', 9, 2) - SUBSTRING('2024-03-08', 9, 2) AS day_diff,
SUBSTRING('2024-04-10 12:34:56', 12, 2) - SUBSTRING('2024-03-08', 12, 2) AS hour_diff,
SUBSTRING('2024-04-10 12:34:56', 15, 2) - SUBSTRING('2024-03-08', 15, 2) AS minute_diff,
SUBSTRING('2024-04-10 12:34:56', 18, 2) - SUBSTRING('2024-03-08', 18, 2) AS second_diff;
この例では、2024年4月10日12時34分56秒と2024年3月8日の差を年、月、日、時、分、秒単位で表示しています。
- 日時文字列のフォーマットが統一されている必要があります。
- 計算結果は数値型に変換する必要があります。
MySQLで2つの日時差を計算するには、いくつかの方法があります。それぞれの方法にはメリットとデメリットがあり、状況に応じて使い分ける必要があります。
- DATEDIFF()関数とTIMEDIFF()関数は、最も簡単で効率的な方法です。
- UNIXタイムスタンプを使用する方法は、タイムゾーンの影響を受けないというメリットがあります。
- SUBSTRING()関数を使用する方法は、複雑な差分計算が可能というメリットがあります。
mysql