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