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