- Home ›
- MySQLの使い方 ›
- MySQLのデータ型
日付型と時刻型(DATE, TIME, DATETIME, TIMESTAMP, YEAR)
MySQL で利用可能なデータ型の中で日付型と時刻型(DATE, TIME, DATETIME, TIMESTAMP, YEAR)の使い方について解説します。
(Last modified: )
日付型と時刻型のデータ型一覧
日付型と時刻型のデータ型として次の 5 つが用意されています。
DATE 日付 '1000-01-01' から '9999-12-31' フォーマット : 'YYYY-MM-DD' DATETIME[(fsp)] 日付と時間の組み合わせ '1000-01-01 00:00:00.000000' から '9999-12-31 23:59:59.999999' フォーマット : 'YYYY-MM-DD HH:MM:SS[.fraction]' TIMESTAMP[(fsp)] タイムスタンプ TIMESTAMP 値は、エポック ('1970-01-01 00:00:00' UTC) からの秒数 '1970-01-01 00:00:01.000000' UTC から '2038-01-19 03:14:07.999999' UTC フォーマット : TIME[(fsp)] 時間 '-838:59:59.000000' から '838:59:59.000000' フォーマット : 'HH:MM:SS[.fraction]' YEAR[(4)] 4 桁の形式では、値は 1901 から 2155 と 0000 フォーマット : YYYY
※ YEAR(2) は MySQL 8.0 からサポートされなくなりました。また YEAR(4) は MySQL 8.0.19 で非推奨となっています。今後は YEAR を使用されるようにしてください。
DATETIME 型、 TIMESTAMP 型、 TIME 型では引数に秒の小数部の桁数を指定することができます。この値は 0 から 6 までの範囲で指定可能です。省略した場合のデフォルトの値は 0 です。
それではそれぞれのデータ型について詳しく確認してみます。
DATE型
DATE 型は日付を格納するのに使用するデータ型です。日付を文字列として入力する場合、 'YYYY-MM-DD' が基本となるフォーマットですが、次のような入力方法も許可されています。
Format Sample --------------------------- 'YYYY-MM-DD' '2024-09-07' 'YY-MM-DD' '24-09-07' 'YYYYMMDD' '20240907' 'YYMMDD' '240907'
また区切り文字は '-' だけではなく次のような文字を使うこともできます。
Format Sample --------------------------- 'YYYY-MM-DD' '2024-09-07' 'YYYY.MM.DD' '2024.09.07' 'YYYY/MM/DD' '2024/09/07' 'YYYY@MM@DD' '2024@09@07'
日付に区切り文字が使われている場合、 1 月から 9 月、そして 1 日から 9 日については 2 桁で入力する必要はありません。
Format Sample --------------------------- 'YYYY-M-D' '2024-9-7'
日付は数値として入力することもできます。
Format Sample --------------------------- YYYYMMDD 20240907 YYMMDD 240907
なお年が 2 桁で入力された場合は次のルールによって 4 桁の年に変換します。
70-99 の範囲の年の値は 1970-1999 00-69 の範囲の年の値は 2000-2069
それでは DATE 型のカラムを持つテーブルを作成します。
create table datetest(dt date);
いろいろなフォーマットでデータを追加してみます。
insert into datetest values('2024-04-17');
insert into datetest values('18-12-5');
insert into datetest values('97-06-24');
insert into datetest values('20230208');
insert into datetest values(150401);
追加したデータを SELECT 文で取得します。
select * from datetest;
いずれのフォーマットで入力しても意図した通りにデータが登録されていることが確認できました。
TIME型
TIME 型は時刻を格納するのに使用するデータ型です。時刻を文字列として入力する場合、 'HH:MM:SS' が基本となるフォーマットですが、次のような入力方法も許可されています。
Format Sample --------------------------- 'HH:MM:SS' '15:25:07' 'HH:MM' '15:25' 'HHMMSS' '152507' 'MMSS' '2507' 'SS' '07' 'D HH:MM:SS' '2 15:25:07' 'D HH:MM' '2 15:25' 'D HH'' '2 15'
1620 などのように 'MMSS' のフォーマットで入力した場合は分と秒になり、 35 のように 'SS' もフォーマットで入力した場合は秒となりますが、 14:49 のように 'HH:MM' のフォーマットで入力した場合は時と分になりますので注意して下さい。
'D' は日にちを表します。 'D' 付きの場合は D×24 が時に加算されて表示されます。
時間に区切り文字が使われている場合、 0 秒から 9 秒、 0 分から 9 分、 0 時から 9 時については 2 桁で入力する必要はありません。
Format Sample ------------------------ 'HH:M:S' '15:3:7'
時間は数値として入力することもできます。
Format Sample ------------------------ HHMMSS 152507 MMSS 2507 SS 07
小数秒を入力する場合は次のように入力します。 fraction は最大 6 桁です。
Format Sample ------------------------------------- 'HH:MM:SS.fraction' '15:25:07.205' 'HHMMSS.fraction' '152507.205' 'D HH:MM:SS.fraction' '2 15:25:07.205' HHMMSS.fraction 152507.205
それでは TIME 型のカラムを持つテーブルを作成します。
create table timetest(t time);
いろいろなフォーマットでデータを追加してみます。
insert into timetest values('15:24:39');
insert into timetest values('08:14');
insert into timetest values('220732');
insert into timetest values('1743');
insert into timetest values('3 19:02:51');
追加したデータを SELECT 文で取得します。
select * from timetest;
いずれのフォーマットで入力しても意図した通りにデータが登録されていることが確認できました。
-- --
今度は秒の小数部の桁数を指定した TIME 型のカラムを持つテーブルを作成します。
create table timetest(t time(3));
2 つのフォーマットでデータを追加してみます。
insert into timetest values('15:24:39.304');
insert into timetest values(210328.521);
追加したデータを SELECT 文で取得します。
select * from timetest;
小数秒を持つデータについて、いずれのフォーマットで入力しても意図した通りにデータが登録されていることが確認できました。
DATETIME型
DATETIME 型は日付と時刻を格納するのに使用するデータ型です。日付と時刻を文字列として入力する場合、 'YYYY-MM-DD HH:MM:SS' が基本となるフォーマットですが、次のような入力方法も許可されています。
Format Sample ----------------------------------------------- 'YYYY-MM-DD HH:MM:SS' '2019-10-04 15:25:07' 'YY-MM-DD HH:MM:SS' '19-10-04 15:25:07' 'YYYYMMDDHHMMSS' '20191004152507' 'YYMMDDHHMMSS' '191004152507'
また区切り文字は '-' だけではなく次のような文字を使うこともできます。
Format Sample ----------------------------------------------- 'YYYY-MM-DD HH:MM:SS' '2019-10-04 15:25:07' 'YYYY.MM.DD HH+MM+SS' '2019.10.04 15+25+07' 'YYYY/MM/DD HH*MM*SS' '2019/10/04 15*25*07' 'YYYY@MM@DD HH^MM^SS' '2019@10@04 15^25^07'
日付や時刻に区切り文字が使われている場合、 1 桁の数値を 2 桁で入力する必要はありません。
Format Sample ----------------------------------------------- 'YYYY-M-D H:M:S' '2009-3-7 8:2:9'
数値として入力することもできます。
Format Sample ----------------------------------------------- YYYYMMDDHHMMSS 20191004152507 YYMMDDHHMMSS 191004152507
それでは DATETIME 型のカラムを持つテーブルを作成します。
create table datetest(dt datetime);
いろいろなフォーマットでデータを追加してみます。
insert into datetest values('2024-05-02 12:48:35');
insert into datetest values('97-12-24 08:12:13');
insert into datetest values(20191126140235);
insert into datetest values('2022/7/4 3+15+9');
追加したデータを SELECT 文で取得します。
select * from datetest;
いずれのフォーマットで入力しても意図した通りにデータが登録されていることが確認できました。なお秒の小数部の桁数を指定する場合は TIME 型を参照されてください。
TIMESTAMP型
TIMESTAMP 型は日付と時刻を格納するのに使用するデータ型です。フォーマットは DATETIME 型とほぼ同じですが、扱える値の範囲が少ないこと、そして利用する目的が異なります。詳しくは別のページで解説しますが、ここでは簡単に TIMESTAMP 型のカラムを持つテーブルを作成して試してみます。
create table stamptest(ts timestamp);
いろいろなフォーマットでデータを追加してみます。
insert into stamptest values('2024-05-02 12:48:35');
insert into stamptest values('2016/7/4 3+15+9');
追加したデータを SELECT 文で取得します。
select * from stamptest;
いずれのフォーマットで入力しても意図した通りにデータが登録されていることが確認できました。
YEAR型
YEAR 型は年を格納するのに使用するデータ型です。フォーマットは YYYY です。
Format Sample ---------------------------- YYYY 2024
文字列として入力することもできます。
Format Sample ---------------------------- 'YYYY' '2024'
DATE 型などと異なり 0 を指定すると 2000 にはなりませんので注意が必要です。数字の 0 や文字列の '0' を指定すると 0000 に変換されます。
※ 以前はフォーマットとして YY も利用できましたが、 MySQL 8.0 からサポート対象外になりました。今後は YYYY フォーマットを使用されてください。
それでは YEAR 型のカラムを持つテーブルを作成します。
create table yeartest(y year);
いろいろなフォーマットでデータを追加してみます。
insert into yeartest values(2024);
insert into yeartest values('1998');
insert into yeartest values(0);
追加したデータを SELECT 文で取得します。
select * from yeartest;
いずれのフォーマットで入力しても意図した通りにデータが登録されていることが確認できました。
-- --
MySQL で利用可能なデータ型の中で日付型と時刻型の使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。