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関数が日付を認識して、日付部分のみを出力しています。
また、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の結合条件指定の違いは?
上記で示した「2019-12-07 01:02:03」という例のように、日付・時間のデータ型のフォーマットが定められています。このフォーマットに従ってDATE関数内に日付・時間の指定をしなければ正しく認識されないため注意しましょう。