Navicat 部落格

在 MySQL 中處理日期和時間 - 第 1 部分 2022 年 2 月 25 日,由 Robert Gravelle 撰寫

DATE、TIME 和 DATETIME 類型

絕大多數資料庫儲存了大量的「時序」資料。時序資料只是表示時間狀態的資料。一個組織可能出於各種原因收集時間資料,例如分析天氣型態和其他環境變數、監控交通狀況、研究人口趨勢等。企業還經常需要儲存有關何時下訂單、何時補充庫存、何時僱用員工,以及有關其日常業務的大量其他資訊。

你可能會感到很驚訝,關聯式資料庫不以相同的方式儲存日期和時間。MySQL 尤其具有規範性。例如,它使用通用 yyyy-mm-dd 格式儲存日期值。此格式是固定的,不可變更。就算你更喜歡使用 mm-dd-yyyy 格式,也不可這樣做。但是,你可以使用 DATE_FORMAT 函式在展示層(通常是應用程式)中按照你想要的方式格式化日期。在「在 MySQL 中處理日期和時間」的前兩部分中,我們將從 DATE、TIME 和 DATETIME 開始,研究MySQL的時序資料類型。

類型一覽

MySQL 提供了五種用於儲存日期和時間的類型,有些只儲存日期,有些儲存時間,還有一些同時儲存兩者。下表總結了每種類型:

類型名稱 描述
 DATE YYYY-MM-DD 格式的日期值
 TIME hh:mm:ss 格式的時間值
 DATETIME YYYY-MM-DD hh:mm:ss 格式的日期和時間值
 TIMESTAMP YYYY-MM-DD hh:mm:ss 格式的時間戳記值
 YEAR YYYYYY 格式的年份值

本文的其餘部分將更詳細地介紹前三種類型,而下一篇文章將重點介紹另外兩種類型。

DATE 類型

MySQL 使用 3 個位元組來儲存 DATE 值。DATE 值的範圍是 1000-01-01 至 9999-12-31。此外,當停用嚴格模式(Strict Mode)時,MySQL 會將任何無效日期(例如 2015-02-30)轉換為零日期值 0000-00-00。在 Navicat 16 的資料表設計器中,你可以從「類型」下拉式清單中選取 DATE 類型:

date_column_in_table_designer (159K)

若要設定 DATE 值,只需使用行事曆控制項選擇日期:

calendar (88K)

當然,你也可以使用 INSERT 陳述式插入 DATE:

insert_date (25K)

TIME 類型

MySQL 使用「HH:MM:SS」格式來查詢和顯示表示一天中 24 小時內某個時間的時間值。而表示兩個事件之間的時間間隔,MySQL 則使用大於 24 小時的「HHH:MM:SS」格式。

以下是 Navicat 16「類型」下拉式清單中的 TIME 類型:

time_column_in_table_designer (79K)

Navicat 提供了 TIME INPUT 控制項設定 TIME 值:

time_input_control (11K)

以下是一個設定開始和結束時間的 INSERT 陳述式:

insert_time (24K)

DATETIME 類型

很多時候,你需要同時儲存日期和時間。為此,你可以使用 MySQL DATETIME 類型。預設情況下,DATETIME 值的範圍是 1000-01-01 00:00:00 至 9999-12-31 23:59:59。當你從 DATETIME 欄查詢資料時,MySQL 會以相同的 YYYY-MM-DD HH:MM:SS 格式顯示 DATETIME 值。

DATETIME 值使用 5 個位元組儲存。此外,DATETIME 值可以包含一個尾端小數秒,最細可以到微秒,格式為 YYYY-MM-DD HH:MM:SS[.fraction],例如 2015-12-20 10:01:00.999999。

對於輸入 DATETIME 值,Navicat 提供了 DATETIME INPUT 控制項,它結合了 DATE 和 TIME 控制項:

datetime_input_control (63K)

DATETIME 值可以使用包含「T」時間部分 delineator 的字串文字或透過轉換為 DATETIME 來設定:

insert_datetime (31K)

預告

在探討了 DATE、TIME 和 DATETIME 類型之後,下一部分將介紹剩餘的兩種時序類型:TIMESTAMP 和 YEAR。

Navicat 文章
頻道記錄
分享
部落格封存檔