日付と時刻型には、DATETIME
、DATE
、TIMESTAMP
、TIME
、YEAR
があります。これらの型のカラムは、いずれも、一定の範囲の正しい値を取りますが、その他に、実際には不正な値を指定するときに使用される
``ゼロ'' の値も取ります。MySQL では、'厳密'
には正しくない一部の日付値(1999-11-31
など)も格納可能であることに注意してください。
これは、日付チェックはアプリケーションで実行されるので
SQL
サーバ側で行う必要はない、という前提に立っているためです。日付チェックを
'迅速' に行うために、MySQL
では、指定された月が 0 〜 12
の範囲にあるかどうかと、指定された日付が 0
〜 31
の範囲にあるかどうかのみチェックします。これらの範囲に
0 が含まれている理由は、MySQL
では、DATE
または
DATETIME
カラムの日の値または月日の値がゼロである日付の格納が許容されているためです。これは、誕生日を格納する必要があるアプリケーションで正確な日付がわからないときなどに非常に役立ちます。この場合、単に
1999-00-00
や 1999-01-00
などとして、日付を格納します(このような日付を指定した場合、DATE_SUB()
や DATE_ADD
などの関数によって正しい値が返ると想定することはできません)。
以下に、日付と時刻型に関して留意すべき一般考慮事項をいくつか示します。
MySQL では、個々の日付または時刻型の値の取り出しは標準形式で行われるが、入力した値(たとえば、日付または時刻型に割り当てる値、またはこれらの型と比較する値の指定時など)については、さまざまな形式で解釈が試みられる。ただし、サポートしている形式は、以降のセクションで説明している形式に限られる。正しい値を指定することが前提となるため、非サポート形式で値を指定すると、予測できない結果が発生する場合がある。
MySQL
では、値の解釈が複数の形式で試みられるが、日付値の年部分は必ず左端と想定される。日付は、年-月-日の順序(例:
'98-09-04'
)で指定する必要がある。一般に使用されている月-日-年や日-月-年の順序(例:
'09-04-98'
、'04-09-98'
)は使用しない。
MySQL では、日付または時刻型の値を数値型のコンテキストで使用した場合、日付または時刻型の値は数値に自動的に変換される。その逆の場合も、同様の変換が行われる。
MySQL
では、日付または時刻型で範囲外の値や不正な値(このセクションの最初の部分を参照)を入力すると、値はその型の
``ゼロ''
値に変換される(この例外として、範囲外の
TIME
値は TIME
型の範囲の最大値または最小値に切り落とされる)。次の表に、それぞれの型の
``ゼロ'' 値を示す。
カラム型 | ``ゼロ'' 値 |
DATETIME |
'0000-00-00 00:00:00' |
DATE |
'0000-00-00' |
TIMESTAMP |
00000000000000 (長さは表示サイズに依存) |
TIME |
'00:00:00' |
YEAR |
0000 |
``ゼロ''
値は特殊な値だが、上の表に示した値を使用することによって、``ゼロ''
値を明示的に格納または参照することができる。また、この他に、より簡単に記述できる値
'0'
または 0
も、``ゼロ''
値の格納または参照に使用できる。
ODBC では、日付または時刻型の値 ``ゼロ''
を処理できないため、MyODBC
バージョン 2.50.12
以降では、MyODBC
を通して日付または時刻型の値 ``ゼロ''
を使用すると、自動的に NULL
に変換される。
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.