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