MySQLの関数を使った日付計算の方法を徹底解説|CURDATE・YEAR・MONTHなど
MySQLでは、組み込みの日付関数を組み合わせることで、現在日付の取得や経過年数の計算など、さまざまな日付に関する処理を簡単に行うことができます。本記事では、代表的な日付関数の使い方を、実際のテーブルデータとSQLクエリ例を交えながら詳しく解説します。
MySQLで使える主な日付関数
- CURDATE()関数:コンピュータ(サーバー)のシステム上の現在の日付を返します。
- YEAR()関数:指定した日付から「年」を取り出して返します。
- MONTH()関数:指定した日付から「月」を取り出して返します。
- DAY()関数:指定した日付から「日」を取り出して返します。
- RIGHT()関数:指定した文字数分だけ、日付文字列の右側(末尾)から文字を抽出して返します。日付比較の式の中で使われると、その評価結果は1または0として返されます。
サンプルデータの確認
ここでは、「Collegedetail」という名前のテーブルに格納されている以下のデータを使用します。このテーブルには、大学のID、所在国、設立日(Estb)が登録されています。
mysql> Select * from Collegedetail; +------+---------+------------+ | ID | Country | Estb | +------+---------+------------+ | 111 | INDIA | 2010-05-01 | | 130 | INDIA | 1995-10-25 | | 139 | USA | 1994-09-25 | | 1539 | UK | 2001-07-23 | | 1545 | Russia | 2010-07-30 | +------+---------+------------+ 5 rows in set (0.00 sec)
各種日付関数を組み合わせたクエリ例
次のクエリでは、CURDATE()、YEAR()、MONTH()、DAY()、RIGHT()といった複数の日付関数を同時に使い、現在日付と各設立日の情報を一括で取得しています。また、RIGHT()関数による比較結果も「Return」列として表示しています。
mysql> Select ID, Estb, CURDATE(), YEAR(Estb), MONTH(Estb), DAY(Estb), (RIGHT(CURDATE(),5) < RIGHT(estb,5)) As 'Return' FROM Collegedetail; +------+------------+------------+------------+-------------+-----------+--------+ | ID | Estb | CURDATE() | YEAR(Estb) | MONTH(Estb) | DAY(Estb) | Return | +------+------------+------------+------------+-------------+-----------+--------+ | 111 | 2010-05-01 | 2017-11-30 | 2010 | 5 | 1 | 0 | | 130 | 1995-10-25 | 2017-11-30 | 1995 | 10 | 25 | 0 | | 139 | 1994-09-25 | 2017-11-30 | 1994 | 9 | 25 | 0 | | 1539 | 2001-07-23 | 2017-11-30 | 2001 | 7 | 23 | 0 | | 1545 | 2010-07-30 | 2017-11-30 | 2010 | 7 | 30 | 0 | +------+------------+------------+------------+-------------+-----------+--------+ 5 rows in set (0.00 sec)
経過年数を計算する応用テクニック
さらに実用的な例として、設立日から現在までの経過年数を求めるクエリを見てみましょう。ポイントは「(現在年 − 設立年) − (月日の比較結果)」という計算式です。もし今年になってまだ設立記念日(月と日の部分)が来ていなければ、RIGHT()関数の比較結果が1となり、その分だけ年数が1つ減算される仕組みです。
mysql> Select ID, estb, CURDATE(),((YEAR(CURDATE())-YEAR(estb))-(RIGHT(CURDATE(),5)<RIGHT(estb,5))) AS 'YEARS_OLD' from collegedetail; +------+------------+------------+-----------+ | ID | estb | CURDATE() | YEARS_OLD | +------+------------+------------+-----------+ | 111 | 2010-05-01 | 2017-11-30 | 7 | | 130 | 1995-10-25 | 2017-11-30 | 22 | | 139 | 1994-09-25 | 2017-11-30 | 23 | | 1539 | 2001-07-23 | 2017-11-30 | 16 | | 1545 | 2010-07-30 | 2017-11-30 | 7 | +------+------------+------------+-----------+ 5 rows in set (0.00 sec)
このように、MySQLの標準的な日付関数を組み合わせれば、単純な年月日の抽出はもちろん、誕生日や設立日からの正確な満年数の計算まで柔軟に対応できます。なお、より簡潔に経過期間を求めたい場合は、TIMESTAMPDIFF()関数やDATEDIFF()関数を使う方法もありますので、用途に応じて使い分けるとよいでしょう。
-
MySQLでテーブルの作成日時・更新日時を確認する方法|SHOW TABLE STATUSの使い方
MySQLでは、create_timeやupdate_timeの情報を参照することで、テーブルがいつ作成され、いつ最後に更新されたのかを正確に把握できます。本記事では、SHOWコマンドを使ってテーブルの作成日時・更新日時を確認する手順を、実際の実行例とともにわかりやすく解説します。 1. データベースを選択する まず、対象となるデータベースを選択します。ここでは、すでに複数のテーブルが存在するデータベース「test3」を例に進めます。 mysql> use test3; Database changed 2. データベース内のテーブル一覧を確認する 次に、以下のクエリを実行して、デー
-
MySQLで日付形式を変換・更新する方法をわかりやすく解説
はじめにMySQLでは、文字列として保存された日付データをSTR_TO_DATE()関数を使って正しい日付形式に変換できます。本記事では、実際のSQL文の例を通じて、日付形式の変換手順を段階的に解説します。1. サンプルテーブルの作成まず、日付データを文字列型(VARCHAR)で格納するテーブルを作成します。mysql> create table DemoTable630 (ArrivalDate varchar(100));Query OK, 0 rows affected (0.55 sec)2. テストデータの挿入次に、INSERT文を使って「YYYY-DD-MM」形式(年-日-月