MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで1970年より前の日付を扱う方法|DATE型の範囲と使い方を実例で解説

MySQLで1970年より前の日付を扱いたい場合は、DATE型を使用するのが効果的です。DATE型は西暦1000年から9999年までの日付を保存できるため、歴史上の日付や古い生年月日なども問題なく管理できます。ただし、DATE型は日付部分のみを扱うデータ型であり、時刻情報は保持しません。時刻も一緒に管理したい場合は、DATETIME型などの利用を検討してください。

MySQLにおけるDATE型の基本仕様

MySQLのDATE型は、次の形式で日付データを表現します。

'YYYY-MM-DD'

取り扱える日付の範囲は以下の通りです。

開始日:

1000-01-01

終了日:

9999-12-31

この範囲を超える日付を挿入しようとすると、警告が出力され「0000-00-00」という不正な値が格納される点に注意しましょう。

テーブルを作成して動作を確認する

それでは、実際にテーブルを作成し、DATE型の挙動を確認してみましょう。まずはサンプル用のテーブルを作成します。

mysql> create table DateDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> DateBefore1970 date
-> );
Query OK, 0 rows affected (0.71 sec)

レコードの挿入

続いて、INSERT文を使って複数のレコードを挿入します。ここでは、有効範囲内のさまざまな日付に加えて、あえて範囲外となる「10000-12-31」も挿入してみます。

mysql> insert into DateDemo(DateBefore1970) values('1000-10-20');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DateDemo(DateBefore1970) values('1940-12-31');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DateDemo(DateBefore1970) values('1500-01-25');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DateDemo(DateBefore1970) values('1900-04-14');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DateDemo(DateBefore1970) values('1710-11-15');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DateDemo(DateBefore1970) values('9999-12-31');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DateDemo(DateBefore1970) values('10000-12-31');
Query OK, 1 row affected, 1 warning (0.11 sec)

挿入したレコードを確認する

SELECT文でテーブル内の全レコードを表示し、結果を確認してみましょう。

mysql> select *from DateDemo;

実行結果は以下の通りです。

+----+----------------+
| Id | DateBefore1970 |
+----+----------------+
| 1 | 1000-10-20 |
| 2 | 1940-12-31 |
| 3 | 1500-01-25 |
| 4 | 1900-04-14 |
| 5 | 1710-11-15 |
| 6 | 9999-12-31 |
| 7 | 0000-00-00 |
+----+----------------+
7 rows in set (0.00 sec)

結果から読み取れるポイント

出力結果を見ると、Id=7として挿入した「10000-12-31」だけが「0000-00-00」になっていることがわかります。これは、DATE型の有効範囲である「1000-01-01〜9999-12-31」を超えているためです。

なお、MySQLのTIMESTAMP型は1970年1月1日からの経過秒数で日時を管理しているため、1970年より前の日付を扱えません。一方、DATE型やDATETIME型であれば1970年以前の日付も問題なく保存できます。歴史データの管理システムや古い生年月日を扱うアプリケーションを開発する際は、各型の有効範囲を理解した上で、用途に合ったデータ型を選択することが重要です。

  1. PHPとMySQLで時刻を扱う方法|strtotime()とDATE_FORMAT()による形式変換

    PHPで時刻形式を変換する方法 PHPで時刻データを扱う際、strtotime()関数を使えば、「8:55 PM」のような人間が読みやすい12時間制の表記を、データベースで扱いやすい24時間制(HH:MM:SS)へ簡単に変換できます。 PHPコード例 $timeValue = 8:55 PM; $changeTimeFormat = date(H:i:s, strtotime($timeValue)); echo(24時間制への変換結果=); echo($changeTimeFormat); このコードでは、まずstrtotime()が文字列「8:55 PM」をUNIXタイムスタンプに変換

  2. MySQLでAUTO_INCREMENT列を扱う方法を徹底解説

    MySQLでは、AUTO_INCREMENT属性を使うことで、新しい行に対して自動的に一意の番号(識別子)を割り当てることができます。本記事では、AUTO_INCREMENT列の基本的な使い方、動作の仕組み、そして利用時に守るべきルールについて、実例とともにわかりやすく解説します。基本的な使い方まずは、以下のクエリを見てみましょう。テーブルを作成し、データを挿入した結果を確認します。クエリ例CREATE TABLE tableName (    id MEDIUMINT NOT NULL AUTO_INCREMENT,