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

今日の日付を取得する方法

SQLでデータ操作をする際に、日付を取得するケースもあると思います。

この記事では、日付取得の中でも「今日の日付」を取得する方法について解説します。

MySQLで今日の日付を取得

MySQLで今日の日付を取得するには「CURDATE関数」を使いましょう。

次のように記述します。

SELECT CURDATE();

実際にSQL文を実行してみると、以下の通り今日の日付を取得できました。

mysql> SELECT CURDATE();
+------------+
| CURDATE()  |
+------------+
| 2020-10-19 |
+------------+
1 row in set (0.00 sec)

また、CURDATE関数と似たものに、「CURRENT_DATE」と「CURRENT_DATE() 」があります。

使い方や取得結果は、CURDATE関数と同様です。

mysql> SELECT CURRENT_DATE;
+--------------+
| CURRENT_DATE |
+--------------+
| 2020-10-19   |
+--------------+
1 row in set (0.00 sec)

mysql> SELECT CURRENT_DATE();
+----------------+
| CURRENT_DATE() |
+----------------+
| 2020-10-19     |
+----------------+
1 row in set (0.00 sec)

また、MySQLではDATA関数を使って、次のように記述することでも今日の日付を取得できます。

mysql> SELECT DATE(NOW());
+-------------+
| DATE(NOW()) |
+-------------+
| 2020-10-19  |
+-------------+
1 row in set (0.00 sec)

PostgreSQLで今日の日付を取得

PostgreSQLで今日の日付を取得するには「CURRENT_DATE」を使いましょう。

使い方はMySQLと同様に、次のように記述します。

SELECT CURRENT_DATE;

実際にSQL文を実行してみると、次のようになるはずです。

mydb=# SELECT CURRENT_DATE;
 current_date 
--------------
 2020-10-19
(1 row)

上記のように、今日の日付を取得できました!

Oracleで今日の日付を取得

Oracleで今日の日付を取得するには「SYSDATE」を使いましょう。

次のように記述します。

SELECT SYSDATE FROM DUAL;

DUAL表とは、Oracleで用意されているダミーのテーブルのことです。

執筆者がOracleを利用していないため、実行結果は省略します。

今日の日付をWHERE句の条件にしてデータを取得

ここでは、今日の日付を条件に指定する方法について見ていきましょう。

実際に動作を確認するため、次のようなサンプルテーブルを作成します。

CREATE TABLE user_table(user_id int, name varchar(20), age int, sex int, create_date date);

作成したテーブルにデータを挿入しましょう。

INSERT INTO user_table VALUES(1, 'Satou', 26, 1, '2020-10-11');
INSERT INTO user_table VALUES(2, 'Abe', 32, 2, '2020-10-14');
INSERT INTO user_table VALUES(3, 'Matsushima', 30, 1, '2020-10-20');
INSERT INTO user_table VALUES(4, 'Hirai', 23, 1, '2020-10-22');
INSERT INTO user_table VALUES(5, 'Tsuda', 45, 2, '2020-10-25');

では、WHERE句を使って今日の日付より前に作成したデータを取得してみます。

次のように記述しましょう。

SELECT * FROM user_table WHERE create_date < CURDATE();

WHERE句のカラムにcreate_dateカラムを、条件部分にCURDATE関数を指定します。

上記のSQL文を実行すると、次のようにデータを取得可能です。

mysql> SELECT * FROM user_table WHERE create_date < CURDATE();
+---------+-------+------+------+-------------+
| user_id | name  | age  | sex  | create_date |
+---------+-------+------+------+-------------+
|       1 | Satou |   26 |    1 | 2020-10-11  |
|       2 | Abe   |   32 |    2 | 2020-10-14  |
+---------+-------+------+------+-------------+
2 rows in set (0.00 sec)

ちゃんと指定したデータが取得できていますね。

 

今日の日付以降のデータを取得するには、次のように指定します。

SELECT * FROM user_table WHERE create_date >= CURDATE();

mysql> SELECT * FROM user_table WHERE create_date >= CURDATE();
+---------+------------+------+------+-------------+
| user_id | name       | age  | sex  | create_date |
+---------+------------+------+------+-------------+
|       3 | Matsushima |   30 |    1 | 2020-10-20  |
|       4 | Hirai      |   23 |    1 | 2020-10-22  |
|       5 | Tsuda      |   45 |    2 | 2020-10-25  |
+---------+------------+------+------+-------------+
3 rows in set (0.01 sec)

このように、データをちゃんと取得できました!

今日の日付をINSERTで登録する

先ほどのサンプルテーブルでは、create_dateカラム に任意の日付を指定しました。

この時、今日の日付をINSERT文で登録することも可能です。

次のように記述します。

INSERT INTO user_table VALUES(6, 'Ishida', 37, 1, CURDATE());

記述方法はとてもカンタンで、日付の代わりに今日の日付を取得する関数(CURDATE関数)を指定すればOKです。

上記SQL文を実行し、テーブル内のデータを確認してみると次のようになっています。

mysql> SELECT * FROM user_table;
+---------+------------+------+------+-------------+
| user_id | name       | age  | sex  | create_date |
+---------+------------+------+------+-------------+
|       1 | Satou      |   26 |    1 | 2020-10-11  |
|       2 | Abe        |   32 |    2 | 2020-10-14  |
|       3 | Matsushima |   30 |    1 | 2020-10-20  |
|       4 | Hirai      |   23 |    1 | 2020-10-22  |
|       5 | Tsuda      |   45 |    2 | 2020-10-25  |
|       6 | Ishida     |   37 |    1 | 2020-10-20  |
+---------+------------+------+------+-------------+
6 rows in set (0.00 sec)

ちゃんと今日の日付でデータの挿入ができています。

今日の日付を「yyyymm」形式で取得

今日の日付を取得する際に、取得する形式を変えたい場合もありますよね。

冒頭で紹介したように、CURDATE関数などで今日の日付を取得すると「yyyy-mm-dd」の形式になります。

ここでは、「yyyymm」形式で取得する方法について見ていきましょう。

結論から言うと、次のように記述することで「yyyymm」形式で取得可能です。

SELECT REPLACE(LEFT(CURDATE(), 7), '-', '') AS yyyymm;

少し分解して仕組みを見てみましょう。

まず、LEFT関数で「2020-10」までの文字を取得しています。

LEFT(CURDATE(), 7)

次に、REPLACE関数でハイフン(-)を空白に置換することで削除しました。

REPLACE(LEFT(CURDATE(), 7), '-', '')
mysql> SELECT REPLACE(LEFT(CURDATE(), 7), '-', '') AS yyyymm;
+--------+
| yyyymm |
+--------+
| 202010 |
+--------+
1 row in set (0.01 sec)

上記のように、ちゃんと指定した形式で取得できています。

次のように記述を少し変えることで、「yyyymmdd」形式で取得も可能です。

SELECT REPLACE(LEFT(CURDATE(), 10), '-', '') AS yyyymmdd;

mysql> SELECT REPLACE(LEFT(CURDATE(), 10), '-', '') AS yyyymmdd;
+----------+
| yyyymmdd |
+----------+
| 20201020 |
+----------+
1 row in set (0.01 sec)

ただし、CURDATE関数は次のように記述することで「数値」として取得でき、「yyyymmdd」形式にできます。

SELECT CURDATE()+0;

mysql> SELECT CURDATE()+0;
+-------------+
| CURDATE()+0 |
+-------------+
|    20201020 |
+-------------+
1 row in set (0.01 sec)

参考までに覚えておくと良いでしょう!

なお、ここで紹介したLEFT関数、REPLACE関数については、次の記事で詳しく解説しています。

【関連記事】

▶︎【SQL】RIGHT関数とLEFT関数の詳細と移植の際の注意点について

▶︎SQLで文字列の置換をするにはreplace関数使用。 複数置換をするサンプルコード

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

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

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

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

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

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

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

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

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

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

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