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

SQLのdate型についてまとめています。

SQL date型の使い方サンプル

SQLのdate型は日付を格納するデータ型です。date型は2020-04-20などのYYYY-MM-DD形式で指定します。

以下は、MySQLでサンプルデータベースのemployeesデータベースのemployeesテーブルの例です。date型のカラムbirth_dateとhire_dateには、YYYY-MM-DD形式で日付データが格納されています。

mysql> desc employees;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no     | int           | NO   | PRI | NULL    |       |
| birth_date | date          | NO   |     | NULL    |       |
| first_name | varchar(14)   | NO   |     | NULL    |       |
| last_name  | varchar(16)   | NO   |     | NULL    |       |
| gender     | enum('M','F') | NO   |     | NULL    |       |
| hire_date  | date          | NO   |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+

mysql> select * from employees limit 10;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
|  10002 | 1964-06-02 | Bezalel    | Simmel    | F      | 1985-11-21 |
|  10003 | 1959-12-03 | Parto      | Bamford   | M      | 1986-08-28 |
|  10004 | 1954-05-01 | Chirstian  | Koblick   | M      | 1986-12-01 |
|  10005 | 1955-01-21 | Kyoichi    | Maliniak  | M      | 1989-09-12 |
|  10006 | 1953-04-20 | Anneke     | Preusig   | F      | 1989-06-02 |
|  10007 | 1957-05-23 | Tzvetan    | Zielinski | F      | 1989-02-10 |
|  10008 | 1958-02-19 | Saniya     | Kalloufi  | M      | 1994-09-15 |
|  10009 | 1952-04-19 | Sumant     | Peac      | F      | 1985-02-18 |
|  10010 | 1963-06-01 | Duangkaew  | Piveteau  | F      | 1989-08-24 |
+--------+------------+------------+-----------+--------+------------+

【関連記事】
【MySQL】日付を扱う。DATEとSQLモードについて解説。

dateの日付変換は、date_formatで書式変更が可能

MySQLの場合、date型のデータは、date_formatでフォーマット変更が可能です。また、year()やmonth()など、date型のデータから年や月など特定の箇所を抜き出す関数も用意されています。

// 現在の日付・時刻
mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2020-04-17 02:29:05 |
+---------------------+

// now()をYYYY-MM-DD形式に変換
mysql> select date_format(now(),'%Y-%m-%d' );
+--------------------------------+
| date_format(now(),'%Y-%m-%d' ) |
+--------------------------------+
| 2020-04-17                     |
+--------------------------------+

// now()の日付部分のみ取得
mysql> select date(now());
+-------------+
| date(now()) |
+-------------+
| 2020-04-17  |
+-------------+

// now()の年部分のみ取得
mysql> select year(now());
+-------------+
| year(now()) |
+-------------+
|        2020 |
+-------------+

【関連記事】
【MySQL】DATE_FORMATの基本的な使い方と応用をわかりやすく解説。

日付の加算、減算はadddate

date型は月によって日数が異なるため、通常の加減算とは異なる処理が必要になります。MySQLでは、日数を考慮した日付の加減算をおこなうadddate関数が用意されています。

// 2020年3月30日に3ヶ月を加える
mysql> select adddate('2020-03-30', interval 3 month);
+-----------------------------------------+
| adddate('2020-03-30', interval 3 month) |
+-----------------------------------------+
| 2020-06-30                              |
+-----------------------------------------+

// 2020年3月30日から、13ヶ月を引く
mysql> select adddate('2020-03-30', interval -1 month);
+------------------------------------------+
| adddate('2020-03-30', interval -1 month) |
+------------------------------------------+
| 2020-02-29                               |
+------------------------------------------+

date型の日付比較の例

date型同士は不等号での比較が可能です。下記のSQLは、hire_date(雇用日)が1990年4月1日の6ヶ月後よりも後のemployees(社員)テーブルのデータを10件取得します。

mysql> select * from employees
where hire_date > adddate('1990-04-01', interval 6 month)
limit 10;

+--------+------------+------------+-------------+--------+------------+
| emp_no | birth_date | first_name | last_name   | gender | hire_date  |
+--------+------------+------------+-------------+--------+------------+
|  10008 | 1958-02-19 | Saniya     | Kalloufi    | M      | 1994-09-15 |
|  10012 | 1960-10-04 | Patricio   | Bridgland   | M      | 1992-12-18 |
|  10016 | 1961-05-02 | Kazuhito   | Cappelletti | M      | 1995-01-27 |
|  10017 | 1958-07-06 | Cristinel  | Bouloucos   | F      | 1993-08-03 |
|  10019 | 1953-01-23 | Lillian    | Haddadi     | M      | 1999-04-30 |
|  10020 | 1952-12-24 | Mayuko     | Warwick     | M      | 1991-01-26 |
|  10022 | 1952-07-08 | Shahaf     | Famili      | M      | 1995-08-22 |
|  10024 | 1958-09-05 | Suzette    | Pettey      | F      | 1997-05-19 |
|  10026 | 1953-04-03 | Yongqiao   | Berztiss    | M      | 1995-03-20 |
|  10028 | 1963-11-26 | Domenick   | Tempesti    | M      | 1991-10-22 |
+--------+------------+------------+-------------+--------+------------+

各データベースのdate型の注意点

Oracleでのdate型の注意点

Oracleでは、日付のデフォルトフォーマットは「日-月をあらわすアルファベット-年」です。YYYY-MM-DD形式に変換するには、to_char関数にフォーマットを指定します。

select to_char(SYSDATE) from dual;

TO_CHAR(SYSDATE)
---------
17-APR-20

select to_char(SYSDATE,'YYYY-MM-DD') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DD')
---------
2020-04-17

SQL Serverでのdate型の注意点

SQL Serverでは、date型の変換関数はformat()となります。

select format(getdate(),'yyyy-MM-dd');

2020-04-17

また、ミリ秒の3桁目で丸め処理が発生するため、厳密な時刻比較をおこなう場合は注意が必要です。

関連)SQLServerでDATETIME型を使用する際の注意点

ProgreSQLでのdate型の注意点

select to_char(now(),'YYYY-MM-DD');
to_date
-------
2020-04-17

//空文字を変換すると、0001-01-01になる
select TO_DATE('','YYYYMMDD');
to_date
-------
0001-01-01

MySQLと大きな違いはありませんが、空文字をto_dateで変換すると0001-01-01になるなど、MySQLやOracleとは細かい部分で挙動が変わります。

まとめ

ポテパンダの一言メモ
  • date型は日付データを格納するデータ型
  • 日付の書式変換、日付の加減算、日付の比較が可能
  • データベースにより、変換関数などに違いあり

SQLを学んでWebエンジニアを目指そう

Webエンジニアは、Webサービスを作るエンジニアで非常に人気の高い職種です。
スタートアップやベンチャー企業が中心なので柔軟性のある雇用形態、魅力的な作業環境、面白いプロジェクト、高い報酬など非常に魅力的な求人が多いです。
Ruby on RailsやGo言語を用いたプロジェクトが多く、SQLも重要なスキルとなります。

このブログを運営するプログラミングスクールのポテパンキャンプでは、実践的なカリキュラムと現役エンジニアからのレビュー、そしてポートフォリオ添削や模擬面談などの面談転職サポートにより、最短距離でWebエンジニアを目指すことができます。

Webエンジニアへの転職を考えている方は、是非一度無料カウンセリングへお申込みください。

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

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

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

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

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

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

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

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

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

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

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