慕课解释: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');
代码块预览 复制
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
在 SQL 中,常见的日期函数有如下几个:
函数名 | 作用 |
---|---|
CURRENT_DATE | 得到当前日期 |
CURRENT_TIME | 得到当前时间 |
CURRENT_TIMESTAMP | 得到当前时间戳 |
EXTRACT | 将英文字符串全部转为小写 |
DATE | 提取时间戳的日期部分 |
YEAR | 提取时间戳的年份部分 |
MONTH | 提取时间戳的月份部分 |
DAY | 提取时间戳的天数部分 |
HOUR | 提取时间戳的小时部分 |
MINUTE | 提取时间戳的分钟部分 |
SECOND | 提取时间戳的秒部分 |
提示: PostgreSQL 不支持 CURRENT_XXX 这些函数,获取当前时间戳可以使用函数
NOW
。
SQL 提供了方便的函数来帮助我们获得当前的日期和时间,且其值与当前系统和时区均有关系。
我们先获取当前日期:
SELECT CURRENT_DATE();
代码块预览 复制
- 1
+----------------+ | CURRENT_DATE() | +----------------+ | 2020-01-29 | +----------------+
代码块预览 复制
- 1
- 2
- 3
- 4
- 5
然后获取当前时间:
SELECT CURRENT_TIME();
代码块预览 复制
- 1
+----------------+ | CURRENT_TIME() | +----------------+ | 19:42:18 | +----------------+
代码块预览 复制
- 1
- 2
- 3
- 4
- 5
当然,我们也可以通过时间戳来一起获取日期和时间:
SELECT CURRENT_TIMESTAMP();
代码块预览 复制
- 1
+---------------------+ | CURRENT_TIMESTAMP() | +---------------------+ | 2020-01-29 19:43:01 | +---------------------+
代码块预览 复制
- 1
- 2
- 3
- 4
- 5
通过EXTRACT
函数我们可以快速抽取 imooc_user 表中create_time
字段的某些具体值,如获得用户是那一年被创建的:
SELECT EXTRACT(YEAR FROM create_time) FROM imooc_user;
代码块预览 复制
- 1
+--------------------------------+ | EXTRACT(YEAR FROM create_time) | +--------------------------------+ | 2020 | | 2020 | | 2020 | +--------------------------------+
代码块预览 复制
- 1
- 2
- 3
- 4
- 5
- 6
- 7
我们也可以抽取具体创建的哪一秒:
SELECT EXTRACT(SECOND FROM create_time) FROM imooc_user;
代码块预览 复制
- 1
+----------------------------------+ | EXTRACT(SECOND FROM create_time) | +----------------------------------+ | 55 | | 55 | | 50 | +----------------------------------+
代码块预览 复制
- 1
- 2
- 3
- 4
- 5
- 6
- 7
我们还可以通过DATE
、YEAR
等具体函数来抽取创建时间,比如用户新建的日期:
SELECT DATE(create_time) FROM imooc_user;
代码块预览 复制
- 1
+-------------------+ | DATE(create_time) | +-------------------+ | 2020-01-29 | | 2020-01-27 | | 2020-01-29 | +-------------------+
代码块预览 复制
- 1
- 2
- 3
- 4
- 5
- 6
- 7
还可以抽取小时部分:
SELECT HOUR(create_time) FROM imooc_user;
代码块预览 复制
- 1
+-------------------+ | HOUR(create_time) | +-------------------+ | 19 | | 11 | | 1 | +-------------------+
代码块预览 复制
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- CURRENT_TIMESTAMP 函数是非常重要的,很多关于日期类型的插入都是通过它来完成的。
- 日期抽取函数多数用来统计具体的年份和月份的数据。如
YEAR(create_time)=2020
。