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引数には
SECOND、MINUTE、DAY、MONTH、YEARなども指定でき、用途に応じて柔軟に使い分けられます。
-
MySQLで時間差を取得するクエリの書き方を解説
MySQLで現在時刻との時間差を取得する方法MySQLでは、NOW() 関数と INTERVAL を組み合わせることで、「現在時刻から一定時間以内」のレコードを簡単に抽出できます。ここでは、現在時刻から5時間以内に到着したデータを取得するクエリを例に、その手順を解説します。1. サンプルテーブルの作成まず、日時を格納するカラムを持つテーブルを作成します。mysql> create table DemoTable1570 -> ( -> ArrivalTime datetime 
-
MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?
MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970 (