Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  日付と時間型の概要

11.1.2 日付と時間型の概要

時間データ型のサマリーについて説明します。時間型のプロパティーおよびストレージ要件の追加情報については、セクション11.3「日付と時間型」およびセクション11.7「データ型のストレージ要件」を参照してください。時間値を演算する関数の説明については、セクション12.7「日付および時間関数」を参照してください。

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

MySQL 5.6.4 以降では、マイクロ秒 (6 桁) までの精度を持つ TIMEDATETIME、および TIMESTAMP 値の小数秒に対応できるようになりました。小数秒部を含むカラムを定義するには、type_name(fsp) の構文を使用します。ここで、type_nameTIMEDATETIME、または TIMESTAMP であり、fsp は小数秒の精度です。例:

CREATE TABLE t1 (t TIME(3), dt DATETIME(6));

fsp 値を指定する場合、0 から 6 の範囲にする必要があります。0 の値は、小数部がないことを表します。省略した場合、デフォルトの精度は 0 です。(これは、以前の MySQL バージョンと互換性を保つため、標準 SQL のデフォルトである 6 とは異なっています。)

MySQL 5.6.5 には、時間型の拡張された自動初期化および更新機能が導入されました。テーブルごとに最大 1 つのカラムではなく、テーブル内のすべての TIMESTAMP カラムにこれらのプロパティーを割り当てられます。さらに、これらのプロパティーは、DATETIME カラムで使用できるようになりました。

YEAR(2) データ型には、使用する前に考慮する必要のある特定の問題があります。MySQL 5.6.6 以降、YEAR(2) は非推奨です。既存のテーブル内の YEAR(2) カラムは以前のとおりに扱われますが、新規または変更したテーブルでは YEAR(2)YEAR(4) に変換されます。詳細は、セクション11.3.4「YEAR(2) の制限と YEAR(4) への移行」を参照してください。

  • DATE

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

  • DATETIME[(fsp)]

    日付と時間の組み合わせです。サポートしている範囲は '1000-01-01 00:00:00.000000' から '9999-12-31 23:59:59.999999' です。MySQL は、'YYYY-MM-DD HH:MM:SS[.fraction]' の形式で DATETIME 値を表示しますが、文字列または数値のどちらかを使用した DATETIME カラムへの値の割り当てを許可しています。

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

    MySQL 5.6.5 以降、DATETIME カラムに対する自動初期化および現在の日時への自動更新は、セクション11.3.5「TIMESTAMP および DATETIME の自動初期化および更新機能」で説明しているように、DEFAULT および ON UPDATE カラム定義句を使用して指定できます。

  • 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 値を表すために予約されているからです。

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

    サーバーで TIMESTAMP 定義をどのように扱うかは、explicit_defaults_for_timestamp システム変数の値によって異なります (セクション5.1.4「サーバーシステム変数」を参照してください)。デフォルトでは、explicit_defaults_for_timestamp は無効であり、サーバーは次のように TIMESTAMP を扱います。

    特に指定されていないかぎり、テーブル内の最初の TIMESTAMP カラムは、明示的に値が割り当てられていなければもっとも新しい変更の日時に自動的に設定されるように定義されています。これにより、TIMESTAMP は、INSERT または UPDATE 操作のタイムスタンプの記録に役立ちます。NULL 値を許可するように NULL 属性で定義されていないかぎり、NULL 値を割り当てることによって、すべての TIMESTAMP カラムを現在の日付と時間に設定することもできます。

    自動初期化および現在の日付と時間への自動更新は、DEFAULT CURRENT_TIMESTAMP および ON UPDATE CURRENT_TIMESTAMP カラム定義句を使用して指定できます。デフォルトでは、前述のように最初の TIMESTAMP カラムにこれらのプロパティーが含まれます。MySQL 5.6.5 以降では、テーブル内のどの TIMESTAMP カラムでもこれらのプロパティーを割り当てるように定義できます。5.6.5 より前では、これらを割り当てられる TIMESTAMP カラムはテーブルごとに最大 1 つにかぎられますが、最初のカラムでは抑制し、代わりに別の TIMESTAMP カラムに割り当てることが可能です。セクション11.3.5「TIMESTAMP および DATETIME の自動初期化および更新機能」を参照してください。

    explicit_defaults_for_timestamp が有効な場合、すべての TIMESTAMP カラムへの DEFAULT CURRENT_TIMESTAMP または ON UPDATE CURRENT_TIMESTAMP 属性の自動的な割り当ては行われません。これらはカラム定義に明示的に含める必要があります。また、NOT NULL として明示的に宣言されていないすべての TIMESTAMP は、NULL 値を許可します。

    explicit_defaults_for_timestamp は、MySQL 5.6.6 以降で使用できます。5.6.6 より前では、サーバーは、explicit_defaults_for_timestamp が無効の場合について説明したように TIMESTAMP を扱います。これらの動作は、デフォルトのままになっていますが、標準外であり、5.6.6 以降では非推奨です。explicit_defaults_for_timestamp を有効化したインストールのアップグレードに関する説明については、セクション2.11.1.3「MySQL 5.5 から 5.6 へのアップグレード」を参照してください。

  • TIME[(fsp)]

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

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

  • YEAR[(2|4)]

    2 桁または 4 桁の形式の年です。デフォルトは 4 桁の形式です。YEAR(2)YEAR(4) は表示形式が違いますが、値の範囲は同じです。4 桁の形式では、値は 1901 から 21550000 として表示されます。2 桁の形式では、値は 70 から 69 として表示され、1970 から 2069 の年を表します。MySQL では、YEAR 値は YYYY または YY の形式で表示されますが、文字列または数値を使用して YEAR カラムに値を割り当てられます。

    注記

    YEAR(2) データ型には、使用する前に考慮する必要のある特定の問題があります。MySQL 5.6.6 以降、YEAR(2) は非推奨です。既存のテーブル内の YEAR(2) カラムは以前のとおりに扱われますが、新規または変更したテーブルでは YEAR(2)YEAR(4) に変換されます。詳細は、セクション11.3.4「YEAR(2) の制限と YEAR(4) への移行」を参照してください。

    入力値の YEAR の表示形式および解釈に関する追加情報については、セクション11.3.3「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;
注記

MySQL Server は、MAXDB SQL モードを有効にして実行できます。この場合、TIMESTAMPDATETIME と同じです。テーブルの作成時にこのモードが有効になっている場合、TIMESTAMP カラムは DATETIME カラムとして作成されます。その結果、このようなカラムでは DATETIME 表示形式が使用され、値の範囲は同じになり、自動初期化や現在の日付と時間への自動更新は行われなくなります。セクション5.1.7「サーバー SQL モード」を参照してください。


User Comments
  Posted by Jeremy Wilson on October 24, 2006
To select from a date range with MySql timestamp using the unix_timestamp, then display in human readable format. This is great with php, when you use drop down date ranges.
The $starttime and $endtime are varibals that I passed in my php script. I also made the varibles into a unix_timestamp in php using the mktime()

select date_format(FieldWithMysqlTimestamp1, '%b-%d-%Y') as Field1, Field2, Field3, date_format(FieldWithMysqlTimestamp2, '%b-%d-%Y') as Field4 from TableName where unix_timestamp(FieldWithMysqlTimestamp1) between $starttime and $endtime
Sign Up Login You must be logged in to post a comment.