文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式 Letter) - 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.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)]

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

    可以提供 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 節,「YEAR 類型」

    注意

    具有明確顯示寬度的 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;