English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
このチュートリアルでは、SQLで日付と時間を使用する方法を学びます。
文字列や数字に加えて、データベースに日付と/文字列や数字に加えて、ユーザーの生年月日や従業員の雇用日、将来のイベントの日付、テーブル内で特定の行を作成または修正した日付と時間など、日付と時間値をデータベースに保存する必要があります。
このタイプのデータは一時データと呼ばれ、各データベースエンジンにはそれらを保存するためのデフォルトのストレージ形式とデータタイプがあります。以下の表は、MySQLデータベースサーバーがサポートする日付と時間のデータタイプを示しています。
タイプ | 設定形式 | 許容値 |
---|---|---|
DATE | YYYY-MM-DD | 1000-01-01 - |
TIME | HH:MM:SSまたはHHH:MM:SS | -838:59:59 - |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 - |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:00 - |
YEAR | YYYY | 1901 - |
DATE値の形式はYYYY-MM-DD、YYYYは全年を表します(4桁の数字であり、MMとDDは日付の月と日部分(両方に先頭のゼロがある数字)をそれぞれ表します。時間値は通常HH:MM:SS形式で表され、HH、MM、SSは時間の時間部分、分部分、秒部分をそれぞれ表します。
以下の文は、データベーステーブルに日付値を挿入する方法を示しています:
INSERT INTO employees (emp_name, hire_date, salary) VALUES ('Adam Smith', '2015-06-24', 4500);
注意:MySQLでは、時間部分の時間値が大きくなる可能性があります。これは、MySQLがそれらを実行時間として扱っているためです。これは、時間データ型が一日の中の時間(必ずしも小さくありません)を表すだけでなく、24時間()であり、2つのイベント間の時間間隔を表すこともできます。これは、それ以上の時間間隔も可能です。24時間、時には負の値も可能です。
大規模アプリケーションのデータベースを使用する際には、通常、データベースにレコードの作成時間や最終更新時間を保存する必要があります。例えば、ユーザー登録時やユーザーが最後にパスワードを更新した日時などです。
MySQLでは、NOW()関数を使用して現在のタイムスタンプを挿入できます。以下のようになります:
-- MySQLデータベースの構文 INSERT INTO users (name, birth_date, created_at) VALUES ('Bilbo Baggins', '1998-04-16', NOW());
しかし、現在の日付と時間を手動で挿入しない場合、TIMESTAMPおよびDATETIMEデータ型の自動初期化と自動更新属性を使用するだけで済みます。
自動属性を割り当てるには、列定義でDEFAULT CURRENT_TIMESTAMPおよびON UPDATE CURRENT_TIMESTAMP子句を指定してください。以下のようになります:
-- MySQLデータベースの構文 CREATE TABLE users ( id INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL UNIQUE, birth_date DATE NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
注意:DATETIMEデータ型の自動初期化と更新は、MySQL 5.6.5バージョンで利用可能です。古いバージョンを使用している場合はTIMESTAMPを使用してください。
ある場合、日付や時間の一部のみを取得したいかもしれません。MySQLでは、部分時間値を抽出するために特別に設計された関数、例えばYEAR()、MONTH()、DAYOFMONTH()、MONTHNAME()、DAYNAME()、HOUR()、MINUTE()、SECOND()などを使用できます。
以下のSQL文はbirth_date列の値の年部分を抽出します。例えば、どのユーザーの誕生日が1987-01-14、ならYEAR(birth_date)は1987。
mysql> SELECT name, YEAR(birth_date) FROM users;
同様に、DAYOFMONTH()関数を使用して月の特定の日を取得できます。例えば、どのユーザーのbirth_dateが1986-10-06、それではDAYOFMONTH(birth_date)は返されます6。
mysql> SELECT name, DAYOFMONTH(birth_date) FROM users;
結果集中でより描述的で読みやすい日付形式を使用する場合は、DATE_FORMAT()とTIME_FORMAT()関数を使用して現在の日付と時間値を再フォーマットすることができます。
以下のSQL文は、より読みやすく設定された形式で表示されますusersテーブルbirth_date列の値のフォーマット、例えば1987年1月14日から1987年1月14日の値。
mysql> SELECT name, DATE_FORMAT(birth_date, '%M %e, %Y') FROM users;