:: DEVELOPER ZONE
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 として取り出されます。データベースが行うことは、ユーザが格納した日付と同じものを取り出すことなので(日付が論理的に正しくない場合でも)、これはスピードと利便性両方の問題になります。
我々は、日付を確認するのはサーバではなくアプリケーションの責任であると考えています。
© 1995-2005 MySQL AB. All rights reserved.
