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


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

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