SQL 日期函數(shù)
1. 前言
慕課解釋:SQL 內(nèi)置的日期函數(shù)主要用于對
日期和時間類型
的字段進行相關(guān)的操作。
本小節(jié),我們將一起學習SQL 函數(shù)中的日期函數(shù)。
日期和時間類型是兩個比較繁瑣的數(shù)據(jù)類型,它們無法和數(shù)值類型一樣易于操作和判斷,因此 SQL 提供了一系列的日期函數(shù)供開發(fā)者使用。
本小節(jié)測試數(shù)據(jù)如下,請先在數(shù)據(jù)庫中執(zhí)行:
DROP TABLE IF EXISTS imooc_user;
CREATE TABLE imooc_user
(
id int PRIMARY KEY,
username varchar(20),
age int,
create_time timestamp
);
INSERT INTO imooc_user(id,username,age,create_time)
VALUES (1,'peter',18, '2020-01-29 19:33:55'),(2,'pedro',24,'2020-01-27 11:33:55'),
(3,'jerry',22,'2020-01-29 01:33:50');
2. 實踐
在 SQL 中,常見的日期函數(shù)有如下幾個:
函數(shù)名 | 作用 |
---|---|
CURRENT_DATE | 得到當前日期 |
CURRENT_TIME | 得到當前時間 |
CURRENT_TIMESTAMP | 得到當前時間戳 |
EXTRACT | 將英文字符串全部轉(zhuǎn)為小寫 |
DATE | 提取時間戳的日期部分 |
YEAR | 提取時間戳的年份部分 |
MONTH | 提取時間戳的月份部分 |
DAY | 提取時間戳的天數(shù)部分 |
HOUR | 提取時間戳的小時部分 |
MINUTE | 提取時間戳的分鐘部分 |
SECOND | 提取時間戳的秒部分 |
提示: PostgreSQL 不支持 CURRENT_XXX 這些函數(shù),獲取當前時間戳可以使用函數(shù)
NOW
。
2.1 例1 獲取當前時間、日期
SQL 提供了方便的函數(shù)來幫助我們獲得當前的日期和時間,且其值與當前系統(tǒng)和時區(qū)均有關(guān)系。
我們先獲取當前日期:
SELECT CURRENT_DATE();
+----------------+
| CURRENT_DATE() |
+----------------+
| 2020-01-29 |
+----------------+
然后獲取當前時間:
SELECT CURRENT_TIME();
+----------------+
| CURRENT_TIME() |
+----------------+
| 19:42:18 |
+----------------+
當然,我們也可以通過時間戳來一起獲取日期和時間:
SELECT CURRENT_TIMESTAMP();
+---------------------+
| CURRENT_TIMESTAMP() |
+---------------------+
| 2020-01-29 19:43:01 |
+---------------------+
2.2 例2 抽取用戶新建時間 1
通過EXTRACT
函數(shù)我們可以快速抽取 imooc_user 表中create_time
字段的某些具體值,如獲得用戶是那一年被創(chuàng)建的:
SELECT EXTRACT(YEAR FROM create_time) FROM imooc_user;
+--------------------------------+
| EXTRACT(YEAR FROM create_time) |
+--------------------------------+
| 2020 |
| 2020 |
| 2020 |
+--------------------------------+
我們也可以抽取具體創(chuàng)建的哪一秒:
SELECT EXTRACT(SECOND FROM create_time) FROM imooc_user;
+----------------------------------+
| EXTRACT(SECOND FROM create_time) |
+----------------------------------+
| 55 |
| 55 |
| 50 |
+----------------------------------+
2.3 例3 抽取用戶新建時間 2
我們還可以通過DATE
、YEAR
等具體函數(shù)來抽取創(chuàng)建時間,比如用戶新建的日期:
SELECT DATE(create_time) FROM imooc_user;
+-------------------+
| DATE(create_time) |
+-------------------+
| 2020-01-29 |
| 2020-01-27 |
| 2020-01-29 |
+-------------------+
還可以抽取小時部分:
SELECT HOUR(create_time) FROM imooc_user;
+-------------------+
| HOUR(create_time) |
+-------------------+
| 19 |
| 11 |
| 1 |
+-------------------+
3. 小結(jié)
- CURRENT_TIMESTAMP 函數(shù)是非常重要的,很多關(guān)于日期類型的插入都是通過它來完成的。
- 日期抽取函數(shù)多數(shù)用來統(tǒng)計具體的年份和月份的數(shù)據(jù)。如
YEAR(create_time)=2020
。