Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

MySQLのDATE関数を含む日付・時間処理関数を使用したことはあるでしょうか。少し余裕が出てきたタイミングでぜひ使用してみることをおすすめします。今回の記事では、MySQL DATEの主な機能やWHERE DATE句の使い方をご紹介しつつ、日付・時間処理関数の使い方を解説していきましょう。

本記事の要点
  • MySQL WHERE DATE関数の機能
  • MySQL WHERE DATE句の使い方
  • MySQLの日付・時間処理関数まとめ

MySQLのDATE関数とは

MySQLのDATE関数とは日付または日付時間式の日付部分を出力する関数です。実際に使い方を見てみましょう。

SELECT DATE('日付または日付時間式');

SELECTステートメントでDATE関数を指定することで、日付または日付時間式の日付部分を出力することができます。具体的な使い方を見てみましょう。

DATE関数を用いたSELECTステートメント

SELECT DATE('2019-12-07 01:02:03');

出力結果

+-----------------------------+
| DATE('2019-12-07 01:02:03') |
+-----------------------------+
| 2019-12-07                  |
+-----------------------------+
1 row in set (0.00 sec)

DATE関数の中に「’2019-12-07 01:02:03」と指定することで、DATE関数が日付を認識して、日付部分のみを出力しています。

ポテパンダの一言メモ

上記で示した「2019-12-07 01:02:03」という例のように、日付・時間のデータ型のフォーマットが定められています。このフォーマットに従ってDATE関数内に日付・時間の指定をしなければ正しく認識されないため注意しましょう。

  •  日付     →「’0000-00-00’」
  •  時間     →「’00:00:00’」
  • 日付・時間   →「’0000-00-00 00:00:00’」
  • タイムスタンプ →「’0000-00-00 00:00:00’」
  •  年      →「0000」

また、DATE関数を使用して今日の日付を取得することも可能です。

DATE関数を用いたSELECTステートメント

SELECT DATE(NOW());

出力結果

+-------------+
| DATE(NOW()) |
+-------------+
| 2019-12-08  |
+-------------+
1 row in set (0.00 sec)

「NOW()」という関数がDATE関数の中に入っています。そもそもNOW関数は、現在の日付・時刻を取得するための関数です。NOW関数を使用すると、以下のような出力結果を得ることができます。

mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2019-12-08 17:23:01 |
+---------------------+
1 row in set (0.01 sec)

つまり、先ほどのDATE関数の例では以下のようなSELECTステートメントになっていたということになります。

SELECT DATE(2019-12-08 17:23:01);

このように段階を踏んでいくと、なぜ「SELECT DATE(NOW());」というSELECTステートメントで現在の日付が取得できるのかが分かるはずです。

こちらの見出しで解説してきたように、MySQLのDATE関数では日付を取得することができます。

【関連記事】
▶︎【Ruby入門】日付の基本と操作(Time, Date)
▶︎【Java】初心者必見!日付を扱うDateクラスの簡単講座

MySQLのWHERE DATE句

MySQLでWHEREとともにDATE関数を用いることによって、日付データが入ったレコードを出力することが可能です。

以下のようなテーブルがあることを前提とします。

productsテーブル

+-------------+-----------------+
| name        | expiration_date |
+-------------+-----------------+
| Milk        | 2019-12-18      |
| Cookie      | 2020-01-20      |
| Beaf        | 2019-12-11      |
| Apple juice | 2019-12-25      |
+-------------+-----------------+

WHERE DATE句を使用し、上記のテーブルから「expiration_date(賞味期限)が2019年12月25日以降の商品」を出力します。

WHERE DATE句を使用したSELECTステートメント

SELECT * FROM products WHERE expiration_date >= DATE('2019-12-25');

出力結果

+-------------+-----------------+
| name        | expiration_date |
+-------------+-----------------+
| Cookie      | 2020-01-20      |
| Apple juice | 2019-12-25      |
+-------------+-----------------+
2 rows in set (0.00 sec)

WHERE DATE句を使用すれば、DATE型の値から日付を認識して、出力結果をだし分けることが可能です。

MySQLの日付・時間処理関数まとめ10選

上記ではDATE関数の主な使い方を解説しましたが、MySQLには他にも日付・時間処理関数が多数存在します。こちらでは知っておくと便利な日付・時間処理関数をご紹介していきましょう。

CURDATE:現在の日付を出力

「CURDATE」関数は、現在の日付を出力することができる関数です。先ほどは「DATE(NOW())」という書き方をしましたが、さらにシンプルに取得できるのがこちらの関数となります。

YEAR/MONTH関数を用いたSELECTステートメント

SELECT CURDATE();

出力結果

+------------+
| CURDATE()  |
+------------+
| 2019-12-08 |
+------------+
1 row in set (0.00 sec)

YEAR/MONTH:日付の年・月部分を出力

「YEAR」関数・「MONTH」関数は、指定した日付の年・月部分を出力することができる関数です。

YEAR/MONTH関数を用いたSELECTステートメント

SELECT YEAR('2019-12-07');
SELECT MONTH('2019-12-07');

出力結果

+--------------------+
| YEAR('2019-12-07') |
+--------------------+
|               2019 |
+--------------------+
1 row in set (0.00 sec)


+---------------------+
| MONTH('2019-12-07') |
+---------------------+
|                  12 |
+---------------------+
1 row in set (0.00 sec)

TIME/HOUR/MINUTE/SECOND:日付の時刻・時間・分・秒部分を出力

「YEAR」関数・「MONTH」関数は、指定した日付の時刻・時間・分・秒部分を出力することができる関数です。

TIME関数を用いたSELECTステートメントと出力結果

SELECT TIME(NOW());
+-------------+
| TIME(NOW()) |
+-------------+
| 17:52:57    |
+-------------+
1 row in set (0.00 sec)

HOUR関数を用いたSELECTステートメントと出力結果

SELECT HOUR(NOW());
+-------------+
| HOUR(NOW()) |
+-------------+
|          17 |
+-------------+
1 row in set (0.00 sec)

MINUTE関数を用いたSELECTステートメントと出力結果

SELECT MINUTE(NOW());
+---------------+
| MINUTE(NOW()) |
+---------------+
|            53 |
+---------------+
1 row in set (0.00 sec)

SECOND関数を用いたSELECTステートメントと出力結果

SELECT SECOND(NOW());
+---------------+
| SECOND(NOW()) |
+---------------+
|             7 |
+---------------+
1 row in set (0.00 sec)

DAYOFWEEK:指定した日付の曜日をインデックス形式で出力

「DAYOFWEEK」関数は、指定した日付の曜日をインデックス形式で出力することができる関数です。

出力される曜日インデックス
  • 日曜日 →「1」
  • 月曜日 →「2」
  • 火曜日 →「3」
  • 水曜日 →「4」
  • 木曜日 →「5」
  • 金曜日 →「6」
  • 土曜日 →「7」

DAYOFWEEK関数を用いたSELECTステートメント

SELECT DAYOFWEEK('2019-12-12');

出力結果

+-------------------------+
| DAYOFWEEK('2019-12-12') |
+-------------------------+
|                       5 |
+-------------------------+
1 row in set (0.00 sec)

DAYNAME:指定した日付の曜日名を出力

「DAYNAME」関数は、指定した日付の曜日名を出力することができる関数です。

DAYNAME関数を用いたSELECTステートメント

SELECT DAYNAME('2019-12-12');

出力結果

+-----------------------+
| DAYNAME('2019-12-12') |
+-----------------------+
| Thursday              |
+-----------------------+
1 row in set (0.00 sec)

MONTHNAME:指定した日付の月名を出力

「MONTHNAME」関数は、指定した日付の月名を出力することができる関数です。

MONTHNAME関数を用いたSELECTステートメント

SELECT MONTHNAME('2019-12-12');

出力結果

+-------------------------+
| MONTHNAME('2019-12-12') |
+-------------------------+
| December                |
+-------------------------+
1 row in set (0.00 sec)

まとめ

今回の記事では、MySQL DATEの主な機能やWHERE DATE句の使い方をご紹介しつつ、日付・時間処理関数の使い方を解説していきました。使ってみると非常に簡単な関数が多いため、ぜひ日付・時間処理の際には利用してみてください。

【関連記事】
▶︎MySQL初心者にマスターしてほしいコマンドラインからの使用方法
▶︎MySQLのleft joinサンプルコード onとusingの結合条件指定の違いは?

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。