MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  日時データ型の構文

11.2.1 日時データ型の構文

時間値を表すための日時データ型は、DATE, TIME, DATETIME, TIMESTAMP および YEAR です。

DATE および DATETIME 範囲の説明では、サポートされているとは、以前の値は機能するが、保証はないことを意味します。

MySQL では、マイクロ秒 (6 桁) までの精度で、TIMEDATETIME および TIMESTAMP の値に小数秒を使用できます。 小数秒部を含むカラムを定義するには、type_name(fsp) の構文を使用します。ここで、type_nameTIMEDATETIME、または 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 の自動初期化および更新機能」 を参照してください。

  • DATE

    日付です。 サポートしている範囲は '1000-01-01' から '9999-12-31' です。 MySQL では、DATE 値は'YYYY-MM-DD'形式で表示されますが、文字列または数値を使用した DATE カラムへの値の割当ては許可されます。

  • DATETIME[(fsp)]

    日付と時間の組み合わせです。 サポートしている範囲は '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 カラムの現在の日時への自動初期化および更新を指定できます。

  • TIMESTAMP[(fsp)]

    タイムスタンプです。 範囲は '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 カラムは、これらのプロパティを持つように定義できます。

  • TIME[(fsp)]

    時間です。 範囲は、'-838:59:59.000000' から '838:59:59.000000' です。 MySQL では、TIME 値は'hh:mm:ss[.fraction]'形式で表示されますが、文字列または数値を使用した TIME カラムへの値の割当ては許可されます。

    小数秒精度を指定するには、0 から 6 の範囲のオプションの fsp 値を指定できます。 0 の値は、小数部がないことを表します。 省略した場合、デフォルトの精度は 0 です。

  • YEAR[(4)]

    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 Manual2-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;

関連キーワード:  TIMESTAMP, カラム, YEAR, クラス, 構文, 数値, 範囲, 精度, 空間, 定義