Documentation Home
MySQL 8.0 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 36.1Mb
PDF (A4) - 36.2Mb


MySQL 8.0 リファレンスマニュアル  /  ...  /  時間値での小数秒

このページは機械翻訳したものです。

11.2.6 時間値での小数秒

MySQL では、マイクロ秒 (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 とは異なっています。)

  • 小数秒の部分を含む TIMEDATE または TIMESTAMP 値を同じタイプのカラムに挿入すると、小数点以下の桁数が少なくなります。 次のように作成および移入されたテーブルについて考えてみます:

    CREATE TABLE fractest( c1 TIME(2), c2 DATETIME(2), c3 TIMESTAMP(2) );
    INSERT INTO fractest VALUES
    ('17:51:04.777', '2018-09-08 17:51:04.777', '2018-09-08 17:51:04.777');

    時間値は丸めでテーブルに挿入されます:

    mysql> SELECT * FROM fractest;
    +-------------+------------------------+------------------------+
    | c1          | c2                     | c3                     |
    +-------------+------------------------+------------------------+
    | 17:51:04.78 | 2018-09-08 17:51:04.78 | 2018-09-08 17:51:04.78 |
    +-------------+------------------------+------------------------+

    このような丸め行われたときに、警告やエラーは表示されません。 この動作は SQL 標準に従います。

    かわりに切捨てを使用して値を挿入するには、TIME_TRUNCATE_FRACTIONAL SQL モードを有効にします:

    SET @@sql_mode = sys.list_add(@@sql_mode, 'TIME_TRUNCATE_FRACTIONAL');

    この SQL モードを有効にすると、時間値は切捨てとともに挿入されます:

    mysql> SELECT * FROM fractest;
    +-------------+------------------------+------------------------+
    | c1          | c2                     | c3                     |
    +-------------+------------------------+------------------------+
    | 17:51:04.77 | 2018-09-08 17:51:04.77 | 2018-09-08 17:51:04.77 |
    +-------------+------------------------+------------------------+
  • 時間引数を取る関数は、小数秒を含む値を受け入れます。 時間関数からの戻り値には、必要に応じて小数秒が含まれます。 たとえば、引数を付けない NOW() は、小数部のない現在の日付と時間を返しますが、0 から 6 のオプション引数を取って、その桁数の小数秒部が戻り値に含まれていることを指定します。

  • 時間リテラルの構文は、DATE 'str'TIME 'str'、および TIMESTAMP 'str' の時間値と ODBC 構文同等の値を生み出します。 指定されている場合、結果の値には後続の小数秒部分が含まれます。 以前は、時間型キーワードは無視され、これらの構造は文字列値を生成していました。 標準 SQL と ODBC の日付および時間リテラルを参照してください