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

MySQLで異なる列の値間の時間差を取得する方法

MySQLで列間の時間差を取得するには?

MySQLでは、timediff()関数とtime_format()関数を組み合わせることで、異なる列に格納された日時の差(時間差)を簡単に計算できます。時間差を求める際はtimediff()メソッドを使用し、その結果を見やすい形式に整形するためにtime_format()を併用します。

ここでは、出勤時刻(PunchIn)と退勤時刻(PunchOut)を例に、具体的な手順を解説します。

1. サンプルテーブルを作成する

まず、2つの日時型(datetime)カラムを持つテーブルを作成します。

mysql> create table DemoTable624 (PunchIn datetime, PunchOut datetime);
Query OK, 0 rows affected (0.60 sec)

2. レコードを挿入する

INSERT文を使って、テーブルに複数のレコードを追加します。

mysql> insert into DemoTable624 values('2019-07-14 12:10:00', '2019-07-14 12:50:00');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable624 values('2019-07-14 11:00:00', '2019-07-14 11:30:00');
Query OK, 1 row affected (0.34 sec)

3. テーブルの内容を確認する

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

mysql> select *from DemoTable624;

実行結果は以下の通りです。

+---------------------+---------------------+
| PunchIn             | PunchOut            |
+---------------------+---------------------+
| 2019-07-14 12:10:00 | 2019-07-14 12:50:00 |
| 2019-07-14 11:00:00 | 2019-07-14 11:30:00 |
+---------------------+---------------------+
2 rows in set (0.00 sec)

4. 時間差を取得するクエリ

PunchIn列とPunchOut列の時間差を「時間・分」の形式で取得するには、次のようなクエリを実行します。

mysql> select time_format(timediff(PunchIn,PunchOut),'%H hrs, %i min.') from DemoTable624;

実行結果は以下の通りです。

+-----------------------------------------------------------+
| time_format(timediff(PunchIn,PunchOut),'%H hrs, %i min.') |
+-----------------------------------------------------------+
| -00 hrs, 40 min.                                          |
| -00 hrs, 30 min.                                          |
+-----------------------------------------------------------+
2 rows in set (0.00 sec)

結果の見方と注意点

フォーマット指定子の意味は以下の通りです。

  • %H: 時間(24時間形式・2桁)
  • %i: 分(2桁)

上記の例では timediff(PunchIn, PunchOut) と記述しているため、「出勤時刻 − 退勤時刻」という順序で計算され、結果がマイナス(-00 hrs, 40 min.)として表示されています。

もし勤務時間のように正の値で時間差を表示したい場合は、引く順序を逆にして timediff(PunchOut, PunchIn) と指定すればOKです。

  1. MySQLで2つの日時(DATETIME)値の差を求める方法

    MySQLで2つの日時値の差を求める方法MySQLで2つのDATETIME型の値の差を求めるには、TIMESTAMPDIFF()関数を使用します。この関数を使うことで、秒・分・時間などの任意の単位で2つの日時の差を簡単に計算できます。まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable -> ( -> DueDatetime1 datetime, -> DueDatetime2 datetime -> );Query OK, 0 rows affected (0.86 sec)次に、INSE

  2. MySQLで2つの日付の差を月単位で求める方法

    MySQLで2つの日付の差を「月」単位で計算したい場合、TIMESTAMPDIFF()関数を使うと簡単に求められます。さらにABS()関数を組み合わせることで、日付の順序に関係なく常に正の値(絶対値)として結果を取得できます。本記事では、実際にテーブルを作成し、サンプルデータを使いながら具体的な手順を解説します。1. テーブルの作成まず、date型のカラムを2つ持つテーブルを作成しましょう。mysql> create table DemoTable    -> (    -> Date1 date