1. 程式人生 > SQL入門教學 >38 SQL 日期函式

38 SQL 日期函式

1. 前言

解釋:SQL 內建的日期函式主要用於對日期和時間型別的欄位進行相關的操作。

本小節,我們將一起學習SQL 函式中的日期函式。

日期和時間型別是兩個比較繁瑣的資料型別,它們無法和數值型別一樣易於操作和判斷,因此 SQL 提供了一系列的日期函式供開發者使用。

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

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 中,常見的日期函式有如下幾個:

函式名 作用
CURRENT_DATE 得到當前日期
CURRENT_TIME 得到當前時間
CURRENT_TIMESTAMP 得到當前時間戳
EXTRACT 將英文字串全部轉為小寫
DATE 提取時間戳的日期部分
YEAR 提取時間戳的年份部分
MONTH 提取時間戳的月份部分
DAY 提取時間戳的天數部分
HOUR 提取時間戳的小時部分
MINUTE 提取時間戳的分鐘部分
SECOND 提取時間戳的秒部分

提示: PostgreSQL 不支援 CURRENT_XXX 這些函式,獲取當前時間戳可以使用函式 NOW

2.1 例1 獲取當前時間、日期

SQL 提供了方便的函式來幫助我們獲得當前的日期和時間,且其值與當前系統和時區均有關係。

我們先獲取當前日期:

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函式我們可以快速抽取 imooc_user 表中create_time欄位的某些具體值,如獲得使用者是那一年被建立的:

SELECT EXTRACT(YEAR FROM create_time) FROM imooc_user;
+--------------------------------+
| EXTRACT(YEAR FROM create_time) |
+--------------------------------+
| 2020                           |
| 2020                           |
| 2020                           |
+--------------------------------+

我們也可以抽取具體建立的哪一秒:

SELECT EXTRACT(SECOND FROM create_time) FROM imooc_user;
+----------------------------------+
| EXTRACT(SECOND FROM create_time) |
+----------------------------------+
| 55                               |
| 55                               |
| 50                               |
+----------------------------------+

2.3 例3 抽取使用者新建時間 2

我們還可以通過DATEYEAR等具體函式來抽取建立時間,比如使用者新建的日期:

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. 小結

  • CURRENT_TIMESTAMP 函式是非常重要的,很多關於日期型別的插入都是通過它來完成的。
  • 日期抽取函式多數用來統計具體的年份和月份的資料。如YEAR(create_time)=2020