Developer

【SQL基礎】日付関数
2021.02.28
Lv1

【SQL基礎】日付関数

本項は日付関数ついて説明していきます。


日付関数とは

名前の通り、日付を操作するための関数が日付関数となります。
現在の日付を取得したり、日付を加減したり、比較したりするなどその他多くの関数が用意されています。

それでは実際にいくつかの日付関数を見ていきましょう。


CURDATE関数(現在の日付を取得する)

操作ログを残す場合など現在日付を取得したい場合は、CURDATE関数を使用します。
書式は下記になります。

CURDATE()

CURDATE関数は特に引数は指定する必要はありません。

では、実際に使ってみましょう。

SELECT CURDATE();

現在日付の取得に成功しました。


CURTIME関数(現在時間を取得する)

現在時刻を取得したい場合は、CURTIME関数を使用します。
書式は下記になります。

CURTIME()

CURDATE関数と同様に特に引数は必要ありません。

では、実際に使ってみましょう。

SELECT CURTIME();

現在時刻のみが取得することができました。


NOW関数(現在日時を取得する)

日付だけでなく時間まで取得したい場合は、NOW関数を使用します。
書式は下記になります。

NOW()

CURDATE関数と同様に特に引数は必要ありません。

では、実際に使ってみましょう。

SELECT NOW();

今度は日時が取得することができました。


DATE_ADD関数(日付に加算する)

現在から10日後の日付など、日付に対して加算したい場合はDATE_ADD関数を使用します。
書式は下記になります。

DATE_ADD(日付, INTERVAL 加算値 単位)
-- または
DATE_ADD(日付, 加算値)

単位を指定しない2つ目の書式の場合は、DAY単位での加算になります。
単位の種類は以下になります。一部分の未抜粋しています。

SECOND
MINUTE
HOUR 時間
DAY
WEEK
MONTH
YEAR

実際に使ってみましょう。

SELECT DATE_ADD("2021-02-28", INTERVAL 7 DAY);
SELECT DATE_ADD("2021-02-28", INTERVAL 1 WEEK);
SELECT DATE_ADD("2021-01-31", INTERVAL 1 MONTH);
SELECT DATE_ADD("2021-01-31", INTERVAL 1 YEAR);

それぞれ、7日後、一週間後、一か月後、一年後の日付が取得できました。
MONTHを使った月単位の加算はきちんと月末も考慮された値が算出されます。
DAYで日付単位で加算する場合は単純に指定分の日付が追加されるだけなので気を付けましょう。


DATE_SUB関数(日付に減算する)

加算ではなく、日付を減算したい場合は、DATE_SUB関数を使用します。
書式は下記になります。

DATE_SUB(日付, INTERVAL 減算値 単位)
-- または
DATE_SUB(日付, 減算値)

使い方は、DATE_ADD関数と同じなります。

SELECT DATE_SUB("2021-02-28", INTERVAL 7 DAY);
SELECT DATE_SUB("2021-02-28", INTERVAL 1 WEEK);
SELECT DATE_SUB("2021-03-31", INTERVAL 1 MONTH);
SELECT DATE_SUB("2021-02-28", INTERVAL 1 YEAR);

それぞれ、7日前、一週間前、一か月前、一年前の日付が取得できました。


今回の学習ポイント

・日付関数は文字列の日付に関わる関数のこと。
・DATE_ADDやDATE_SUBで日付単位で加減算する場合は、月末が考慮される。


練習問題

問題として使用するデータは「SQL練習問題」のものを使用しています。
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。

worldcup2014.zip

[sql] CREATE DATABASE worldcup2014;

use worldcup2014

source C:\worldcup2014.sql
[/sql]

1.2014 FIFAワールドカップ開催時(2014年6月12日)に35歳以上だった選手をDATE_ADD関数を使用して抽出してください。
(選手の誕生日は「players.birth」)

答え
[sql] SELECT *
FROM players
WHERE "2014-06-12" >= DATE_ADD(birth, INTERVAL 35 YEAR);
[/sql]


誕生日に35年を足した日付が2014年6月12日以下なら35歳なので、DATE_ADD関数で誕生日に35年を追加して比較しています。

 

 

連載目次リンク

SQL基礎 連載目次

関連する連載リンク

SQL練習問題 一覧まとめ