DATE
値の書式は
'YYYY-MM-DD'
です。標準 SQL
では、他の書式は使用できません。この書式は、UPDATE
式と SELECT
ステートメントの WHERE
節で使用してください。たとえば、以下のように使用します。
mysql> SELECT * FROM tbl_name WHERE date >= '1997-05-05';
日付が数値コンテキストで使用されている場合は、利便性を考えて、MySQL
は日付を数値に自動的に変換します(逆の場合も同様です)。更新時や
WHERE
節で ``柔軟な''
文字列書式を使用できるので、日付を
TIMESTAMP
、DATE
または
DATETIME
カラムと比較することもできます(柔軟な書式とは、どんな句読文字もパート間の区切り記号として使用できる書式のことを言います。たとえば、'1998-08-15'
と '1998#08#15'
は同一です)。また
MySQL
は、区切り記号を含まない文字列(たとえば
'19980815'
)も、それが日付として理解できる場合は変換することができます。
特別な '0000-00-00'
日付は、'0000-00-00'
として格納し取り出すことができます。MyODBC
を介して '0000-00-00'
日付を使用している場合、MyODBC
バージョン 2.40.12 以上では自動的に
NULL
に変換されます。
MySQL は上述の変換を実行するため、以下のステートメントを使用します。
mysql>INSERT INTO tbl_name (idate) VALUES (19970505);
mysql>INSERT INTO tbl_name (idate) VALUES ('19970505');
mysql>INSERT INTO tbl_name (idate) VALUES ('97-05-05');
mysql>INSERT INTO tbl_name (idate) VALUES ('1997.05.05');
mysql>INSERT INTO tbl_name (idate) VALUES ('1997 05 05');
mysql>INSERT INTO tbl_name (idate) VALUES ('0000-00-00');
mysql>SELECT idate FROM tbl_name WHERE idate >= '1997-05-05';
mysql>SELECT idate FROM tbl_name WHERE idate >= 19970505;
mysql>SELECT MOD(idate,100) FROM tbl_name WHERE idate >= 19970505;
mysql>SELECT idate FROM tbl_name WHERE idate >= '19970505';
ただし、以下は動作しません。
mysql> SELECT idate FROM tbl_name WHERE STRCMP(idate,'19970505')=0;
STRCMP()
は文字列関数なので、idate
が文字列に変換され、文字列比較が実行されます。'19970505'
は日付に変換されず、日付比較も実行されません。
MySQLは、日付が正しいかどうかという非常に限定された確認しか行いません。'1998-2-31'
のような不正な日付を格納すると、間違った日付が格納されます。
MySQL は、日付を圧縮して保存するため、結果バッファに適合しない特定の日付は格納できません。日付の受け入れ規則は、以下のとおりです。
MySQL
が任意の日付を格納し取り出せる場合、DATE
と DATETIME
カラムは間違った日付を受けつける。
0 〜 31 のすべての値は、どんな日付にも受け入れられる。これは、3 つの別々のフィールドで年、月、日を保存する Web アプリケーションでは非常に便利である。
日または月フィールドをゼロにすることもできる。これは、DATE
カラムに生年月日を格納する場合で、日付の一部しか知らないときに便利である。
日付を適切な値に変換できない場合は、0
が DATE
フィールドに格納され、0000-00-00
として取り出されます。データベースが行うことは、ユーザが格納した日付と同じものを取り出すことなので(日付が論理的に正しくない場合でも)、これはスピードと利便性両方の問題になります。
我々は、日付を確認するのはサーバではなくアプリケーションの責任であると考えています。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.