用於表示時間值的日期與時間資料類型為 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;