文件首頁
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.1 日期與時間資料類型語法

用於表示時間值的日期與時間資料類型為 DATETIMEDATETIMETIMESTAMPYEAR

對於 DATEDATETIME 範圍描述,支援表示雖然較早的值可能有效,但不保證。

MySQL 允許 TIMEDATETIMETIMESTAMP 值的小數秒,精確度最高可達微秒 (6 位數)。若要定義包含小數秒部分的欄,請使用語法 type_name(fsp),其中 type_nameTIMEDATETIMETIMESTAMP,而 fsp 為小數秒精確度。例如

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

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

表格中的任何 TIMESTAMPDATETIME 欄都可以具有自動初始化和更新屬性;請參閱 第 13.2.5 節「TIMESTAMP 和 DATETIME 的自動初始化和更新」

  • 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.499999'。MySQL 以 'YYYY-MM-DD hh:mm:ss[.fraction]' 格式顯示 DATETIME 值,但允許使用字串或數字將值指派給 DATETIME 欄。

    可以提供 0 到 6 範圍內的可選 fsp 值,以指定小數秒精確度。值 0 表示沒有小數部分。如果省略,則預設精確度為 0。

    可以使用 DEFAULTON UPDATE 欄定義子句,指定 DATETIME 欄的自動初始化和更新為目前日期和時間,如 第 13.2.5 節「TIMESTAMP 和 DATETIME 的自動初始化和更新」所述。

  • TIMESTAMP[(fsp)]

    時間戳記。範圍為 '1970-01-01 00:00:01.000000' UTC 到 '2038-01-19 03:14:07.499999' UTC。 TIMESTAMP 值會儲存為自 Epoch ('1970-01-01 00:00:00' UTC) 以來的秒數。 TIMESTAMP 無法表示值 '1970-01-01 00:00:00',因為這相當於自 Epoch 起的 0 秒,而值 0 保留用於表示 '0000-00-00 00:00:00',即 TIMESTAMP 值。

    可以提供 0 到 6 範圍內的可選 fsp 值,以指定小數秒精確度。值 0 表示沒有小數部分。如果省略,則預設精確度為 0。

    伺服器處理 TIMESTAMP 定義的方式取決於 explicit_defaults_for_timestamp 系統變數的值 (請參閱 第 7.1.8 節「伺服器系統變數」)。

    如果啟用 explicit_defaults_for_timestamp,則不會將 DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP 屬性自動指派給任何 TIMESTAMP 欄。它們必須明確包含在欄定義中。此外,任何未明確宣告為 NOT NULLTIMESTAMP 都允許 NULL 值。

    如果停用 explicit_defaults_for_timestamp,伺服器會按如下方式處理 TIMESTAMP

    除非另有指定,否則表格中的第一個 TIMESTAMP 資料行會被定義為自動設定為最近修改的日期和時間,如果沒有明確賦予值的話。這使得 TIMESTAMP 在記錄 INSERTUPDATE 操作的時間戳記時非常有用。您也可以將任何 TIMESTAMP 資料行設定為目前的日期和時間,方法是賦予它一個 NULL 值,除非它已使用 NULL 屬性定義為允許 NULL 值。

    可以使用 DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP 資料行定義子句來指定自動初始化和更新為目前的日期和時間。預設情況下,第一個 TIMESTAMP 資料行具有這些屬性,如先前所述。但是,表格中的任何 TIMESTAMP 資料行都可以定義為具有這些屬性。

  • TIME[(fsp)]

    一個時間。範圍是 '-838:59:59.000000''838:59:59.000000'。MySQL 以 'hh:mm:ss[.fraction]' 格式顯示 TIME 值,但允許使用字串或數字將值賦予 TIME 資料行。

    可以提供 0 到 6 範圍內的可選 fsp 值,以指定小數秒精確度。值 0 表示沒有小數部分。如果省略,則預設精確度為 0。

  • YEAR[(4)]

    一個 4 位數格式的年份。MySQL 以 YYYY 格式顯示 YEAR 值,但允許使用字串或數字將值賦予 YEAR 資料行。值顯示為 19012155,或 0000

    有關 YEAR 顯示格式和輸入值解釋的更多資訊,請參閱第 13.2.4 節,「The YEAR Type」

    注意

    具有明確顯示寬度的 YEAR(4) 資料類型已被棄用;您應該預期在未來版本的 MySQL 中會移除對它的支援。請改為使用沒有顯示寬度的 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;