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

MySQLで2桁の年の日付値を使用するのはなぜ良い習慣ではないのですか?


ご存知のとおり、YEAR(2)は1年を2桁の形式で格納します。たとえば、1969を1年として格納するために69と書くことができます。 YEAR(2)では、1970年から2069年(70年から69年)まで年を指定できます。

MySQLは、次のルールを使用して2桁の年の値を解釈します-

    00〜69の範囲の年の値は2000〜2069に変換されます。
  • 70〜99の範囲の年の値は1970〜1999に変換されます。

世紀が不明なため、この形式で保存された値はあいまいになるため、日付値を2桁の形式で保存しないでください。

MySQLの例に従うことでより明確に理解できます-

mysql> Create Table year_test(val year(2));
Query OK, 0 rows affected, 1 warning (0.23 sec)

mysql> insert into year_test(val) values('70');
Query OK, 1 row affected (0.14 sec)

mysql> insert into year_test(val) values('00');
Query OK, 1 row affected (0.06 sec)

mysql> select * from year_test;
+-----+
| val |
+-----+
| 70  |
| 00  |
+-----+
2 rows in set (0.00 sec)

mysql> select * from year_test where val = '1970';
+-----+
| val |
+-----+
| 70  |
+-----+
1 row in set (0.03 sec)

mysql> select * from year_test where val = '2000';
+-----+
| val |
+-----+
| 00  |
+-----+
1 row in set (0.00 sec)

mysql> select * from year_test where val = '1900';
Empty set (0.06 sec)

00を「val」に格納することにより、「1900」または「2000」のどちらの年を暗示するかは不明です。 MySQLはそれを2000年と解釈しています。


  1. MySQLの日付値を持つレコードから最終日を見つける方法は?

    最終日、つまり最新の日付を取得するには、サブクエリで集計関数MAX()を使用します。まずテーブルを作成しましょう- mysql> create table DemoTable (    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,    ExpiryDate date ); Query OK, 0 rows affected (1.40 sec) 挿入コマンド-を使用して、テーブルにいくつかのレコードを挿入します mysql> insert into DemoTable(ExpiryDate) va

  2. MySQLで列の値をシャッフルしますか?

    要素をシャッフルするには、ORDER BY RAND()を使用する必要があります。まずテーブルを作成しましょう- mysql> create table DemoTable1557    -> (    -> SubjectId int NOT NULL AUTO_INCREMENT PRIMARY KEY,    -> SubjectName varchar(20)    -> ); Query OK, 0 rows affected (0.91 sec) 挿入コマンド-を使用して