今日の日付を取得する方法
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関数については、次の記事で詳しく解説しています。
【関連記事】