用於表示時間值的日期與時間資料類型為 DATE、TIME、DATETIME、TIMESTAMP 和 YEAR。
對於 DATE 和 DATETIME 範圍描述,「支援」表示雖然較早的值可能有效,但不保證。
MySQL 允許 TIME、DATETIME 和 TIMESTAMP 值的小數秒,精確度最高可達微秒 (6 位數)。若要定義包含小數秒部分的欄,請使用語法 ,其中 type_name(fsp)type_name 為 TIME、DATETIME 或 TIMESTAMP,而 fsp 為小數秒精確度。例如
CREATE TABLE t1 (t TIME(3), dt DATETIME(6), ts TIMESTAMP(0));fsp 值 (如果提供) 必須在 0 到 6 的範圍內。值 0 表示沒有小數部分。如果省略,則預設精確度為 0。(這與標準 SQL 的預設值 6 不同,以便與先前的 MySQL 版本相容。)
表格中的任何 TIMESTAMP 或 DATETIME 欄都可以具有自動初始化和更新屬性;請參閱 第 13.2.5 節「TIMESTAMP 和 DATETIME 的自動初始化和更新」。
日期。支援的範圍為
'1000-01-01'到'9999-12-31'。MySQL 以'格式顯示YYYY-MM-DD'DATE值,但允許使用字串或數字將值指派給DATE欄。日期和時間組合。支援的範圍為
'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。可以使用
DEFAULT和ON UPDATE欄定義子句,指定DATETIME欄的自動初始化和更新為目前日期和時間,如 第 13.2.5 節「TIMESTAMP 和 DATETIME 的自動初始化和更新」所述。時間戳記。範圍為
'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_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP屬性自動指派給任何TIMESTAMP欄。它們必須明確包含在欄定義中。此外,任何未明確宣告為NOT NULL的TIMESTAMP都允許NULL值。如果停用
explicit_defaults_for_timestamp,伺服器會按如下方式處理TIMESTAMP除非另有指定,否則表格中的第一個
TIMESTAMP資料行會被定義為自動設定為最近修改的日期和時間,如果沒有明確賦予值的話。這使得TIMESTAMP在記錄INSERT或UPDATE操作的時間戳記時非常有用。您也可以將任何TIMESTAMP資料行設定為目前的日期和時間,方法是賦予它一個NULL值,除非它已使用NULL屬性定義為允許NULL值。可以使用
DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP資料行定義子句來指定自動初始化和更新為目前的日期和時間。預設情況下,第一個TIMESTAMP資料行具有這些屬性,如先前所述。但是,表格中的任何TIMESTAMP資料行都可以定義為具有這些屬性。一個時間。範圍是
'-838:59:59.000000'到'838:59:59.000000'。MySQL 以'格式顯示hh:mm:ss[.fraction]'TIME值,但允許使用字串或數字將值賦予TIME資料行。可以提供 0 到 6 範圍內的可選
fsp值,以指定小數秒精確度。值 0 表示沒有小數部分。如果省略,則預設精確度為 0。一個 4 位數格式的年份。MySQL 以
YYYY格式顯示YEAR值,但允許使用字串或數字將值賦予YEAR資料行。值顯示為1901到2155,或0000。有關
YEAR顯示格式和輸入值解釋的更多資訊,請參閱第 13.2.4 節,「The YEAR Type」。
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;