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

MySQLのDATEDIFF()関数でDateTimeを比較し、異なる列の日付の差を求める方法

MySQLでDATEDIFF()関数を使ったDateTime比較の基本

異なる列に格納された日付(DateTime)同士を比較して差分を求めたい場合は、DATEDIFF()関数を使用します。この関数は、2つの日付の差を「日数」として返します。ここでは、生年月日(DOB)と現在日付(CurrentDate)の2つの列を持つテーブルを例に、23歳以上のレコードを抽出する手順を解説します。

ステップ1:テーブルを作成する

まず、DateTime型の列を2つ持つテーブルを作成します。

mysql> create table DemoTable(DOB datetime,CurrentDate datetime);
Query OK, 0 rows affected (0.59 sec)

ステップ2:レコードを挿入する

INSERTコマンドを使ってサンプルデータを登録します。現在の日付はCURDATE()関数で自動的に取得できるため、手動で入力する必要はありません。

mysql> insert into DemoTable values('1995-01-21',CURDATE());
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('1998-11-01',CURDATE());
Query OK, 1 row affected (0.39 sec)
mysql> insert into DemoTable values('2000-10-24',CURDATE());
Query OK, 1 row affected (0.22 sec)

ステップ3:登録したデータを確認する

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

mysql> select *from DemoTable;

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

+---------------------+---------------------+
| DOB | CurrentDate |
+---------------------+---------------------+
| 1995-01-21 00:00:00 | 2019-07-08 00:00:00 |
| 1998-11-01 00:00:00 | 2019-07-08 00:00:00 |
| 2000-10-24 00:00:00 | 2019-07-08 00:00:00 |
+---------------------+---------------------+
3 rows in set (0.00 sec)

ステップ4:DATEDIFF()で日付の差を比較する

以下のクエリでは、DATEDIFF(CurrentDate, DOB)で2つの日付の差(日数)を取得し、それを365で割ることで「概算の年数」を求めています。この値が23より大きいレコード、つまり23歳以上のレコードのみを抽出しています。

mysql> select *from DemoTable where (datediff(CurrentDate,DOB) / 365) > 23;

実行結果:

+---------------------+---------------------+
| DOB | CurrentDate |
+---------------------+---------------------+
| 1995-01-21 00:00:00 | 2019-07-08 00:00:00 |
+---------------------+---------------------+
1 row in set (0.00 sec)

3件のうち、1995年生まれの1件だけが条件を満たしていることがわかります。

DATEDIFF()関数を使う際のポイント

  • DATEDIFF(日付1, 日付2)は「日付1 − 日付2」の日数を返します。引数の順序を逆にすると負の値になるため注意が必要です。
  • 365で割る方法は閏年を考慮しない概算値となります。正確な年齢を計算したい場合は、TIMESTAMPDIFF(YEAR, DOB, CurrentDate)を使うとより精度の高い結果が得られます。
  • 引数にはdatetime型・date型の列のほか、'YYYY-MM-DD'形式の文字列リテラルも指定できます。

このようにDATEDIFF()関数を活用すれば、異なる列に格納された日付を簡単に比較でき、年齢や経過期間などの条件に基づいた柔軟なデータ抽出が可能になります。

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

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

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

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