MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで2つの日時の時間差を取得・計算する方法

MySQLでは、TIMESTAMPDIFF()関数を使うことで、2つの日時の差を簡単に求めることができます。さらにABS()関数と組み合わせることで、開始日時と終了日時のどちらが先であっても、常に正の値(絶対値)として時間差を取得できます。

TIMESTAMPDIFF()関数の基本構文

時間差を取得するための基本的な構文は以下の通りです。

SELECT ABS(TIMESTAMPDIFF(HOUR, yourColumnName1, yourColumnName2)) as anyVariableName
FROM yourTableName;

TIMESTAMPDIFF(HOUR, ...)は第1引数に単位を指定し、第2引数と第3引数に渡した2つの日時の差をその単位で返します。ABS()で囲むことで、引数の順序に関係なく正の値が得られます。

サンプルテーブルの作成

実際の動作を確認するために、まずテーブルを作成しましょう。以下のクエリを実行します。

mysql> create table DifferenceInHours
    -> (
    -> StartDateTime datetime,
    -> EndDateTime datetime
    -> );
Query OK, 0 rows affected (0.59 sec)

レコードの挿入

次に、INSERTコマンドを使ってテストデータを数件挿入します。あえて終了日時が開始日時より前になるデータも含めています。

mysql> insert into DifferenceInHours values('2018-12-20 10:00:00', '2018-12-19 12:00:00');
Query OK, 1 row affected (0.11 sec)

mysql> insert into DifferenceInHours values('2018-12-20 11:00:00', '2018-12-19 11:00:00');
Query OK, 1 row affected (0.16 sec)

mysql> insert into DifferenceInHours values('2018-12-20 10:30:00', '2018-12-19 11:00:00');
Query OK, 1 row affected (0.13 sec)

登録データの確認

SELECT文で、テーブル内のすべてのレコードを表示してみましょう。

mysql> select *from DifferenceInHours;

出力結果

+---------------------+---------------------+
| StartDateTime       | EndDateTime         |
+---------------------+---------------------+
| 2018-12-20 10:00:00 | 2018-12-19 12:00:00 |
| 2018-12-20 11:00:00 | 2018-12-19 11:00:00 |
| 2018-12-20 10:30:00 | 2018-12-19 11:00:00 |
+---------------------+---------------------+
3 rows in set (0.00 sec)

時間差を取得するクエリ

以下が、2つの日時の差を「時間」単位で取得するクエリです。

mysql> SELECT ABS(TIMESTAMPDIFF(HOUR, StartDateTime, EndDateTime)) as Hour
    -> from DifferenceInHours;

実行結果

+------+
| Hour |
+------+
|   22 |
|   24 |
|   23 |
+------+
3 rows in set (0.00 sec)

ポイント解説

  • 順序を気にせず使える: ABS()を使用しているため、引数に渡す日時の順序が逆でも常に正の値が返されます。
  • 端数は切り捨てられる: TIMESTAMPDIFF()は完全な単位数のみを返します。例えば3件目のデータは実際には23時間30分の差がありますが、結果は「23」と表示されます。分単位まで必要な場合は、単位をMINUTEに変更するか、SECONDで取得して後から換算してください。
  • 他の単位にも対応: 第1引数にはSECONDMINUTEDAYMONTHYEARなども指定でき、用途に応じて柔軟に使い分けられます。
  1. MySQLで時間差を取得するクエリの書き方を解説

    MySQLで現在時刻との時間差を取得する方法MySQLでは、NOW() 関数と INTERVAL を組み合わせることで、「現在時刻から一定時間以内」のレコードを簡単に抽出できます。ここでは、現在時刻から5時間以内に到着したデータを取得するクエリを例に、その手順を解説します。1. サンプルテーブルの作成まず、日時を格納するカラムを持つテーブルを作成します。mysql> create table DemoTable1570    -> (    -> ArrivalTime datetime 

  2. MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?

    MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970     (