用來表示時間值的日期和時間資料類型為 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 的自動初始化和更新」中所述。時間戳記。範圍是 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_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 節,「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;