MySQLのDATEDIFF()関数で2つのタイムスタンプの差を日数で取得する方法
はじめに
MySQLでは、DATEDIFF()関数を使うことで、2つのタイムスタンプ(日時)の差を日数として簡単に計算できます。この記事では、基本構文から実践的なサンプルまで、具体例を交えてわかりやすく解説します。
DATEDIFF()関数の基本構文
DATEDIFF()関数は、第1引数の日付から第2引数の日付を引いた日数を返します。基本構文は以下のとおりです。
SELECT DATEDIFF(カラム名1, カラム名2) AS 任意の別名 FROM テーブル名;
なお、DATEDIFF()は日付部分のみを比較するため、時刻(時・分・秒)は計算結果に含まれない点に注意してください。
サンプルテーブルの作成
まず、動作を確認するためのテーブルを作成しましょう。以下のクエリで、「IssueTime(発行日時)」と「DueTime(期限日時)」という2つのTIMESTAMP型カラムを持つテーブルを作成します。
mysql> CREATE TABLE DifferenceTimestamp
-> (
-> IssueTime TIMESTAMP,
-> DueTime TIMESTAMP
-> );
Query OK, 0 rows affected (0.66 sec)
テストデータの挿入
次に、INSERT文を使ってレコードを挿入します。ここでは、現在日時を取得するNOW()と、DATE_ADD()関数で過去の日時に調整した値を組み合わせてデータを作成しています。
mysql> INSERT INTO DifferenceTimestamp VALUES(NOW(), DATE_ADD(NOW(), INTERVAL -30 DAY));
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DifferenceTimestamp VALUES(NOW(), DATE_ADD(NOW(), INTERVAL -24 DAY));
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DifferenceTimestamp VALUES(NOW(), DATE_ADD(NOW(), INTERVAL -5 DAY));
Query OK, 1 row affected (0.14 sec)
登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> SELECT * FROM DifferenceTimestamp;
実行結果は以下のとおりです。
+---------------------+---------------------+
| IssueTime | DueTime |
+---------------------+---------------------+
| 2018-12-07 17:48:28 | 2018-11-07 17:48:28 |
| 2018-12-07 17:48:40 | 2018-11-13 17:48:40 |
| 2018-12-07 17:48:46 | 2018-12-02 17:48:46 |
+---------------------+---------------------+
3 rows in set (0.00 sec)
2つのタイムスタンプの差を日数で取得する
それでは、DATEDIFF()関数を使って、IssueTimeとDueTimeの差を日数で取得してみましょう。実行するクエリは次のとおりです。
mysql> SELECT DATEDIFF(IssueTime, DueTime) AS DifferenceInTimestampDays FROM DifferenceTimestamp;
実行結果:
+---------------------------+
| DifferenceInTimestampDays |
+---------------------------+
| 30 |
| 24 |
| 5 |
+---------------------------+
3 rows in set (0.00 sec)
このように、DueTimeがIssueTimeよりそれぞれ30日・24日・5日前であることが一目でわかります。
まとめ
MySQLのDATEDIFF()関数を使えば、2つのタイムスタンプ間の日数差をたった1行のクエリで簡単に算出できます。締め切りまでの残り日数の計算や、処理期間の集計など、さまざまな場面で活用できる便利な関数なので、ぜひ使い方をマスターしておきましょう。
-
MySQLで2つの列の組み合わせごとの出現回数を集計する方法
MySQLでは、GROUP BY句とGREATEST()・LEAST()関数を組み合わせることで、2つの列にまたがる値の組み合わせごとの出現回数を簡単に集計できます。この記事では、具体的なサンプルを使って手順を解説します。1. サンプルテーブルを作成するまず、2つの名前列を持つテーブルを作成します。mysql> create table DemoTable -> ( -> Name1 varchar(20), -> Name2 varchar(20) -> );Query OK, 0 rows affected (0.61 sec)2. テ
-
MySQLで2つの日付の差を月単位で求める方法
MySQLで2つの日付の差を「月」単位で計算したい場合、TIMESTAMPDIFF()関数を使うと簡単に求められます。さらにABS()関数を組み合わせることで、日付の順序に関係なく常に正の値(絶対値)として結果を取得できます。本記事では、実際にテーブルを作成し、サンプルデータを使いながら具体的な手順を解説します。1. テーブルの作成まず、date型のカラムを2つ持つテーブルを作成しましょう。mysql> create table DemoTable -> ( -> Date1 date