1. 程式人生 > SQL入門教學 >18 SQL Date & Time

18 SQL Date & Time

1. 定義

解釋:DateTime資料型別分別用於儲存日期時間格式類資料。

2. 前言

本小節中,我們將學習 SQL 種常見的日期和時間資料型別。

在很多真實業務中,我們需要儲存一些日期時間資料,比如:使用者生日新聞聯播播出時間等等;若是採用字串儲存,在操作的時候會頗為麻煩,為了方便使用者,SQL 給我們提供了日期和時間資料型別和諸多好用的函式。

提示: 不同的 DBMS 對於日期和時間的支援差異很大,本小節會著重介紹幾種常用資料型別。

本小節測試資料如下,請先在資料庫中執行:

DROP TABLE IF EXISTS imooc_user;
CREATE TABLE imooc_user
(
username varchar(20), age int, lunchtime time, birthday date ); INSERT INTO imooc_user(username,age,lunchtime,birthday) VALUES ('peter', 18, '12:00:00', '2002-10-21'), ('pedro', 24, '11:30:00', '1996-03-15');

3. SQL Time

SQL Time 用於儲存時間類資料型別,時間的範圍在-838:59:59.000000 ~ 838:59:59.000000之間,當然有效值在00:00:00~23.59.59之間。

3.1 例1 插入使用者

請書寫 SQL 語句,向imooc_user中插入一個新使用者,使用者名稱為lucy,lunchtime為00:00:00

分析:

由題幹可知,使用 Insert 指令向表中插入資料即可;由於在新建 imooc_user 表時已經指定 lunchtime 的資料型別為time,在語句中寫入格式化後的時間字串,資料庫會自動識別並存儲。

語句:

INSERT INTO imooc_user(username,lunchtime) VALUES('lucy','00:00:00');

插入成功後,結果為:

+----------+--------+-----------+------------+
| username | age    | lunchtime | birthday   |
+----------+--------+-----------+------------+
| lucy     | <null> | 00:00:00  | <null>     |
+----------+--------+-----------+------------+

4. SQL Date

SQL Date 用於儲存日期類資料型別,日期的有效值範圍在1000-01-01 ~ 9999-12-31之間。

4.1 例2 更新使用者

請書寫 SQL 語句,更新imooc_user中的lucy使用者,將其年齡設定為20,生日設定為2000-01-08

分析:

題幹中明確指出更新使用者,使用 Update 指令,更新欄位為年齡和生日。

語句:

UPDATE imooc_user SET age=20,birthday='2000-01-08' WHERE username='lucy';

更新成功後,結果為:

+----------+-----+-----------+------------+
| username | age | lunchtime | birthday   |
+----------+-----+-----------+------------+
| lucy     | 20  | 00:00:00  | 2000-01-08 |
+----------+-----+-----------+------------+

5. SQL Timestamp

SQL Timestamp 用來儲存時間戳資料,不僅可以儲存日期資料,還可以儲存時間資料。

5.1 例3 修改使用者表

請書寫 SQL 語句,給imooc_user表新增create_time欄位,欄位型別為timestamp,並更新lucy使用者的create_time欄位的值為當前時間戳。

分析:

需先使用 Alter 指令給 imooc_user 新增 create_time 欄位,欄位型別為 timestamp,然後使用 Update 指令,更新 lucy 使用者的 create_time 欄位為當前時間戳。

提示: SQL 中提供了now函式可以方便的生成當前時間戳。

語句:

ALTER TABLE imooc_user ADD create_time timestamp;
UPDATE imooc_user SET create_time=now() WHERE username='lucy';

更新成功後,結果為:

+----------+-----+-----------+------------+---------------------+
| username | age | lunchtime | birthday   | create_time         |
+----------+-----+-----------+------------+---------------------+
| lucy     | 20  | 00:00:00  | 2000-01-08 | 2020-01-12 22:43:38 |
+----------+-----+-----------+------------+---------------------+

6. 其它

在 SQL 標準中關於時間和日期的資料型別主要有三類,即timedatetimestamp

不過在不同的資料庫中,相應的時間會有所不同,如 MySQL 中還支援 datetime 來融合 date 和 time;而在 SQL Server 中不支援 timestamp 資料型別,僅支援 datetime 型別;PostgreSQL 對日期型別支援最為複雜,甚至還支援日期範圍之類的日期格式。

7. 小結

  • timestamp 會受到時區因素影響,請提前設定資料庫正確的配置資訊保證資料的正確性。
  • datetime 和 timestamp 二者一定程度上可以通用,但是某些資料庫只支援其中的一種。
  • time、date 和 timestamp 都可以像其它資料型別一樣使用運算子,如>