このページは機械翻訳したものです。
時間値を表すための日時データ型は、DATE, TIME, DATETIME, TIMESTAMP および YEAR です。
DATE および DATETIME 範囲の説明では、「サポートされている」とは、以前の値は機能するが、保証はないことを意味します。
MySQL では、マイクロ秒 (6 桁) までの精度で、TIME、DATETIME および TIMESTAMP の値に小数秒を使用できます。 小数秒部を含むカラムを定義するには、 の構文を使用します。ここで、type_name(fsp)type_name は TIME、DATETIME、または TIMESTAMP であり、fsp は小数秒の精度です。 例:
CREATE TABLE t1 (t TIME(3), dt DATETIME(6), ts TIMESTAMP(0));
fsp 値を指定する場合、0 から 6 の範囲にする必要があります。 0 の値は、小数部がないことを表します。 省略した場合、デフォルトの精度は 0 です。 (これは、以前の MySQL バージョンと互換性を保つため、標準 SQL のデフォルトである 6 とは異なっています。)
テーブル内の TIMESTAMP または DATETIME カラムには、自動初期化および自動更新プロパティを設定できます。セクション11.2.5「TIMESTAMP および DATETIME の自動初期化および更新機能」 を参照してください。
-
日付です。 サポートしている範囲は
'1000-01-01'から'9999-12-31'です。 MySQL では、DATE値は'形式で表示されますが、文字列または数値を使用したYYYY-MM-DD'DATEカラムへの値の割当ては許可されます。 -
日付と時間の組み合わせです。 サポートしている範囲は
'1000-01-01 00:00:00.000000'から'9999-12-31 23:59:59.999999'です。 MySQL では、DATETIME値は'形式で表示されますが、文字列または数値を使用したYYYY-MM-DD hh:mm:ss[.fraction]'DATETIMEカラムへの値の割当ては許可されます。小数秒精度を指定するには、0 から 6 の範囲のオプションの
fsp値を指定できます。 0 の値は、小数部がないことを表します。 省略した場合、デフォルトの精度は 0 です。セクション11.2.5「TIMESTAMP および DATETIME の自動初期化および更新機能」 で説明されているように、
DEFAULTおよびON UPDATEのカラム定義句を使用して、DATETIMEカラムの現在の日時への自動初期化および更新を指定できます。 -
タイムスタンプです。 範囲は
'1970-01-01 00:00:01.000000'UTC から'2038-01-19 03:14:07.999999'UTC です。TIMESTAMP値は、エポック ('1970-01-01 00:00:00'UTC) からの秒数として格納されます。TIMESTAMPは、'1970-01-01 00:00:00'という値を表すことはできません。これは、エポックからの秒数が 0 であることと同等で、0 という値は'0000-00-00 00:00:00'、つまり「ゼロ」のTIMESTAMP値を表すために予約されているからです。小数秒精度を指定するには、0 から 6 の範囲のオプションの
fsp値を指定できます。 0 の値は、小数部がないことを表します。 省略した場合、デフォルトの精度は 0 です。サーバーで
TIMESTAMP定義をどのように扱うかは、explicit_defaults_for_timestampシステム変数の値によって異なります (セクション5.1.8「サーバーシステム変数」を参照してください)。explicit_defaults_for_timestampが有効な場合、すべてのTIMESTAMPカラムへのDEFAULT CURRENT_TIMESTAMPまたはON UPDATE CURRENT_TIMESTAMP属性の自動的な割り当ては行われません。 これらはカラム定義に明示的に含める必要があります。 また、NOT NULLとして明示的に宣言されていないすべてのTIMESTAMPは、NULL値を許可します。explicit_defaults_for_timestampが無効になっている場合、サーバーは次のようにTIMESTAMPを処理します:特に指定されていないかぎり、テーブル内の最初の
TIMESTAMPカラムは、明示的に値が割り当てられていなければもっとも新しい変更の日時に自動的に設定されるように定義されています。 これにより、TIMESTAMPは、INSERTまたはUPDATE操作のタイムスタンプの記録に役立ちます。NULL値を許可するようにNULL属性で定義されていないかぎり、NULL値を割り当てることによって、すべてのTIMESTAMPカラムを現在の日付と時間に設定することもできます。自動初期化および現在の日付と時間への自動更新は、
DEFAULT CURRENT_TIMESTAMPおよびON UPDATE CURRENT_TIMESTAMPカラム定義句を使用して指定できます。 デフォルトでは、前述のように最初のTIMESTAMPカラムにこれらのプロパティーが含まれます。 ただし、テーブル内のTIMESTAMPカラムは、これらのプロパティを持つように定義できます。 -
時間です。 範囲は、
'-838:59:59.000000'から'838:59:59.000000'です。 MySQL では、TIME値は'形式で表示されますが、文字列または数値を使用したhh:mm:ss[.fraction]'TIMEカラムへの値の割当ては許可されます。小数秒精度を指定するには、0 から 6 の範囲のオプションの
fsp値を指定できます。 0 の値は、小数部がないことを表します。 省略した場合、デフォルトの精度は 0 です。 -
4 桁形式の年。 MySQL では、
YEAR値はYYYY形式で表示されますが、文字列または数値を使用したYEARカラムへの値の割当ては許可されます。 値は、1901から2155または0000として表示されます。入力値の
YEARの表示形式および解釈に関する追加情報については、セクション11.2.4「YEAR 型」を参照してください。注記MySQL 8.0.19 では、明示的な表示幅を持つ
YEAR(4)データ型は非推奨になりました。将来のバージョンの MySQL ではサポートされなくなる予定です。 かわりに、同じ意味を持つ表示幅を指定せずにYEARを使用してください。MySQL 8.0 では、古いバージョンの MySQL で許可されている 2 桁の
YEAR(2)データ型はサポートされていません。 4 桁のYEARに変換する手順は、MySQL 5.7 Reference Manual の 2-Digit YEAR(2) Limitations and Migrating to 4-Digit YEAR を参照してください。
SUM() および AVG() 集計関数は時間値を扱いません。 (これらは値を数字に変換するので、最初の数字以外の文字のあとのすべての情報が失われます。) この問題を回避するには、数値単位に変換し、集計操作を実行してから、時間値に戻します。 例:
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;