在 MySQL 中處理日期和時間(一)
第一章節(jié):DATE、TIME 和 DATETIME 類型
絕大多數(shù)數(shù)據(jù)庫存儲了大量的“時態(tài)”數(shù)據(jù)。時態(tài)數(shù)據(jù)只是表示時間狀態(tài)的簡單數(shù)據(jù)。一個組織可能出于各種原因收集時態(tài)數(shù)據(jù),例如分析天氣模式和其他環(huán)境變量、監(jiān)控交通狀況、研究人口趨勢等。企業(yè)還經(jīng)常需要存儲有關(guān)何時下訂單、何時補(bǔ)貨、何時雇用員工,以及有關(guān)其日常業(yè)務(wù)的大量其他信息。
你可能會感到很驚訝,關(guān)系數(shù)據(jù)庫不會以相同的方式存儲日期和時間。MySQL 尤其具有規(guī)范性。例如,它使用通用 yyyy-mm-dd 格式存儲日期值。此格式是固定的,不可更改。就算你更喜歡使用 mm-dd-yyyy 格式,也不可能這樣做。但是,你可以使用 DATE_FORMAT 函數(shù)在表示層(通常是應(yīng)用程序)中按照你想要的方式格式化日期。在“在 MySQL 中處理日期和時間”的前兩部分中,我們將從 DATE、TIME 和 DATETIME 開始研究 MySQL 的時態(tài)數(shù)據(jù)類型。
類型一覽
MySQL 提供了五種用于存儲日期和時間的類型,一些僅用于日期,另一些用于時間,還有一些包含兩者。下表總結(jié)了每種類型:

本文的其余部分將更詳細(xì)地介紹 DATE、TIME 和 DATETIME 類型,而下一篇文章將重點(diǎn)介紹另外兩種類型。
DATE 類型
MySQL 使用 3 個字節(jié)來存儲 DATE 值。DATE 值的范圍是從 1000-01-01 到 9999-12-31。此外,當(dāng)禁用嚴(yán)格模式(Strict Mode)時,MySQL 會將任何無效日期(例如 2015-02-30)轉(zhuǎn)換為零日期值 0000-00-00。
在 Navicat 客戶端的表設(shè)計器中,你可以從“類型”下拉列表中選擇 DATE 類型:

若要設(shè)置 DATE 值,你可以使用日歷控件簡單地選擇日期:

當(dāng)然,你也可以使用 INSERT 語句插入 DATE:

TIME 類型
MySQL 使用“HH:MM:SS”格式來查詢和顯示表示一天中 24 小時內(nèi)某個時間的時間值。當(dāng)表示兩個事件之間的時間間隔時,MySQL 使用大于 24 小時的“HHH:MM:SS”格式。
以下是 Navicat 表設(shè)計“類型”下拉列表中的 TIME 類型:

Navicat 提供了 TIME INPUT 控件設(shè)置 TIME 值:

以下是一個設(shè)置開始和結(jié)束時間的 INSERT 語句:

DATETIME 類型
很多時候,你需要同時存儲日期和時間。為此,你可以使用 MySQL DATETIME 類型。默認(rèn)情況下,DATETIME 值的范圍是從 1000-01-01 00:00:00 到 9999-12-31 23:59:59。當(dāng)你從 DATETIME 列查詢數(shù)據(jù)時,MySQL 會以相同的 YYYY-MM-DD HH:MM:SS 格式顯示 DATETIME 值。
DATETIME 值使用 8 個字節(jié)進(jìn)行存儲。此外,DATETIME 值可以包含一個尾隨小數(shù)秒,最細(xì)可以到微秒,格式為 YYYY-MM-DD HH:MM:SS[.fraction],例如 2015-12-20 10:01:00.999999。
對于輸入 DATETIME 值,Navicat 提供了 DATETIME INPUT 控件,它結(jié)合了 DATE 和 TIME 控件:

DATETIME 值可以使用包含“T”時間部分描述符的字符串文字或通過轉(zhuǎn)換為 DATETIME 來設(shè)置:

預(yù)告
在探討了 DATE、TIME 和 DATETIME 類型之后,下一部分將介紹剩余的兩種時間類型:TIMESTAMP 和 YEAR。
推薦閱讀
(點(diǎn)擊標(biāo)題可跳轉(zhuǎn)閱讀)
