SQL 中的昨天、今天和明天

图片

大家好,我是只谈技术不剪发的 Tony 老师。

SQL 标准为我们定义了很多内置的处理函数,极大地方便了信息的获取和数据的处理。今天给大家介绍一下获取系统日期的内置函数,以及不同数据库中的扩展实现,包括:MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite 数据库。

功能MySQLOracleSQL ServerPostgreSQLSQLite
当前日期CURRENT_DATE
CURDATE()
CURRENT_DATE()
CURRENT_DATE
SYSDATE
GETDATE()CURRENT_DATECURRENT_DATE
前一天CURRENT_DATE - INTERVAL 1 DAY
SUBDATE(CURRENT_DATE, 1)
DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY)
CURRENT_DATE - 1DATEADD(DAY, -1, GETDATE()CURRENT_DATE - 1DATE(CURRENT_DATE,’-1 days’)
后一天CURRENT_DATE + INTERVAL 1 DAY
ADDDATE(CURRENT_DATE, 1)
DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY)
CURRENT_DATE + 1DATEADD(DAY, 1, GETDATE()CURRENT_DATE + 1DATE(CURRENT_DATE,‘1 days’)

如果觉得文章对你有用,欢迎评论📝、点赞👍、推荐🎁

获取今天的日期

SQL 标准定义了 CURRENT_DATE 函数,用于获取数据库系统的当前日期。例如:

-- MySQL、PostgreSQL、SQLite
SELECT CURRENT_DATE AS today;
today     |
----------|
2020-10-14|

-- Oracle
SELECT CURRENT_DATE AS today
FROM dual;
TODAY              |
-------------------|
2020-10-14 08:22:55|

-- SQL Server
SELECT CAST(GETDATE() AS DATE) AS today;
today     |
----------|
2020-10-14|

其中,Oracle 数据库中的 DATE 类型包含了日期和时间两部分信息;SQL Server 中的 GETDATE() 函数返回的是日期和时间信息,使用 CAST 函数转换为日期;SQLite 返回的结果类型为字符串。

除了 CURRENT_DATE 函数之外,有些数据库还实现了扩展的函数。例如,MySQL 中的 CURDATE() 和 CURRENT_DATE() 函数也可以返回当前日期:

-- MySQL
SELECT CURDATE(), CURRENT_DATE();
CURDATE() |CURRENT_DATE()|
----------|--------------|
2020-10-14|    2020-10-14|

Oracle 也可以使用 SYSDATE 函数获取当前日期,例如:

SELECT TRUNC(SYSDATE) AS today
FROM dual;
TODAY              |
-------------------|
2020-10-14 00:00:00|

SYSDATE 函数同样会返回日期和时间两部分信息,使用 TRUNC 函数截断时间部分。

获取昨天的日期

基于当前日期减去一天,就可以获得昨天的日期。对于 MySQL,可以使用以下语句:

-- MySQL
SELECT CURRENT_DATE - INTERVAL '1' DAY AS yesterday;
yesterday |
----------|
2020-10-13|

除了直接使用 + 或者 - 进行加减运算之外,MySQL 还提供了 SUBDATE、ADDDATE、DATE_SUB、DATE_ADD 函数,具体可以参考 MySQL 常用日期时间函数

对于 Oracle,可以直接使用 + 或者 - 进行日期的加减运算:

-- Oracle
SELECT CURRENT_DATE - 1 AS yesterday
FROM dual;
YESTERDAY          |
-------------------|
2020-10-13 08:28:01|

对于 SQL Server,可以使用 DATEADD 函数进行日期的加减运算:

-- SQL Server
SELECT CAST(DATEADD(DAY, -1, GETDATE()) AS DATE) AS yesterday;
yesterday |
----------|
2020-10-13|

对于 PostgreSQL,可以直接使用 + 或者 - 进行日期加减运算:

-- PostgreSQL
SELECT CURRENT_DATE - 1 AS yesterday;
yesterday |
----------|
2020-10-13|

更多关于 PostgreSQL 常用日期时间函数的介绍,可以参考这篇文章

对于 SQLite,可以使用 DATE(timestring, modifier, modifier, …) 函数实现日期的运算:

-- SQLite
SELECT DATE(CURRENT_DATE,'-1 days') AS yesterday;
yesterday |
----------|
2020-10-13|

该函数返回结果的类型为字符串,更多的 SQLite 日期时间函数可以参考官方文档

获取明天的日期

获取明天的日期和获取昨天的日期类似,将减法修改为加法即可。例如:

-- MySQL
SELECT ADDDATE(CURRENT_DATE, 1) AS tomorrow;
tomorrow  |
----------|
2020-10-15|

-- Oracle
SELECT CURRENT_DATE + 1 AS tomorrow
FROM dual;
TOMORROW           |
-------------------|
2020-10-15 08:45:16|

-- SQL Server
SELECT CAST(DATEADD(DAY, 1, GETDATE()) AS DATE) AS tomorrow;
tomorrow  |
----------|
2020-10-15|

-- PostgreSQL
SELECT CURRENT_DATE + 1 AS tomorrow;
tomorrow  |
----------|
2020-10-15|

-- SQLite
SELECT DATE('now', '1 days') AS tomorrow;

总结

除了获取系统日期之外,SQL 还定义了获取时间 TIME 和时间戳 TIMESTAMP 的函数,以及相关的处理函数和运算符,具体可以参考这篇文章

不剪发的Tony老师 CSDN认证博客专家 数据库架构师
毕业于北京航空航天大学,十多年数据库管理与开发经验,拥有OCP以及RHCE证书。目前在一家全球性的游戏公司从事数据库架构设计和开发,CSDN学院签约讲师以及GitChat专栏作者。
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页
实付 69.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值