文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  時間值中的小數秒

13.2.6 時間值中的小數秒

MySQL 支援 TIMEDATETIMETIMESTAMP 值的小數秒,精度最高可達微秒(6 位數)。

  • 若要定義包含小數秒部分的欄位,請使用語法 type_name(fsp),其中 type_nameTIMEDATETIMETIMESTAMP,而 fsp 是小數秒精度。例如:

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

    如果給定,fsp 值必須在 0 到 6 的範圍內。值 0 表示沒有小數部分。如果省略,則預設精度為 0。(為了與先前的 MySQL 版本相容,這與標準 SQL 的預設值 6 不同。)

  • 將具有小數秒部分的 TIMEDATETIMESTAMP 值插入到相同類型但小數位數較少的欄位中會導致四捨五入。考慮建立並填入如下表格:

    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 日期與時間常值