如何在 SQL 中获取当前日期和时间

导航到

本文由 Pius Aboyi 撰写。向下滚动查看作者的简介。

SQL 数据库具有多个功能,可以降低处理日期和时间的复杂性。使用这些功能以及日期和时间类型列,您可以依靠 SQL 来编写和读取日期和时间数据。

在本篇博文中,您将学习如何使用 SQL 日期和时间函数来获取当前日期和时间。

什么是日期和时间函数?

SQL 日期和时间函数提供不同选项,以帮助提取、转换和格式化日期和时间值。

存在仅处理日期的日期函数,仅处理时间的时钟函数,以及可以执行包含时间的完整日期操作的日期时间函数。

用户可用的日期和时间函数取决于所使用的SQL发行版,例如MySQL与SQL Server。以下表格列出了一些MySQL和SQL Server的日期和时间函数以及它们的功能。

MySQL日期和时间函数

函数 描述
NOW() 以“年-月-日 时:分:秒”格式获取当前日期和时间
CURDATE() 以“年-月-日”格式仅获取当前日期
CURTIME() 仅以“时:分:秒”格式返回当前时间
DATE_FORMAT() 接受日期时间输入并返回用户定义格式的日期。
HOUR() 从时间中提取小时
DAY() 从日期中提取天

SQL Server日期和时间函数

函数 描述
GETDATE() 返回当前日期和时间
DATEPART() 返回日期的一部分
DATEDIFF() 计算两个日期之间的差异
SYSUTCDATETIME 以UTC返回系统日期和时间
CONVERT() 将日期和时间转换为不同的格式
MONTH() 从日期中提取月份

为什么使用日期和时间函数?

从提供日期时间值的写入和读取的标准格式到有助于转换时间值的函数,SQL日期和时间函数有多个用途。接下来,我们将描述其中的一些。

查询特定日期的数据

您可以使用日期和时间函数来查询SQL数据库中与特定日期和时间相关的记录。例如,您可以使用MySQL中的CURDATE()函数获取日期字段值等于当前日期的数据。

查询过去或未来的日期数据

除了查询特定日期和时间外,SQL还具有允许您向特定时间值添加或减去以查找与特定时间之前的日期和时间相关的数据的函数。例如,您可以使用SQL日期和时间函数从昨天获取数据,或获取几天内将要过期的库存商品的记录。

转换日期和时间格式

由于格式不统一,SQL中的日期和时间查询可能很复杂。然而,SQL提供了可以将一个日期格式转换为另一个格式的函数。SQL-Functions

如何在SQL中获取当前日期和时间

到此为止,您已经知道了SQL日期和时间函数的作用。您还了解了一些这些函数的用途。现在,让我们通过一些实际示例来了解如何使用CURDATE()函数。

示例1:获取今天所有的记录

在此示例中,我们将使用MySQL中的当前日期函数来查询一个表,获取日期字段值等于当前日的所有记录。

首先,您需要在要查询的表中具有记录。对于此示例,创建一个goods表,并将以下数据插入其中。

Item_name (类型: varchar) manufacture_date (类型: date) expiry_date (类型: date)
Milk 2023-01-04 2023-02-24
Seasoning Cube 2022-02-14 2023-02-24
Cornflakes 2023-01-13 2024-05-11

接下来,让我们查询表,获取如果今天是2023年2月24日,今天将过期的商品。

为此,通过您首选的编程语言或数据库查看器运行以下SQL查询。

SELECT * FROM goods WHERE expiry_date  = CURDATE();

对于上述数据集,查询将返回以下结果

Date-Time-SQL

这里发生的情况是,CURDATE()函数以默认的SQL DATE类型格式返回了当前日的值。在此示例中,CURDATE是2023-02-24。因此,查询返回了所有将expiry_date设置为2023-02-24的商品。

示例 2:获取当前小时发布的所有记录

在上一个示例中,我们展示了如何使用当前日期查询数据。现在让我们来了解一下如何使用当前时间函数。

再次提醒,准备好你将要搜索的数据集。创建一个包含以下数据的 stories

标题 (类型: varchar) 内容 (类型: varchar) 发布时间 (类型: datetime)
突发新闻:今天是另一个星期一 是的,今天是星期一。又一个平凡的星期一... 2023-02-24 05:48:14
体育:阿根廷成为世界冠军 漫长的等待终于结束了... 2023-02-24 09:48:14

然后,运行以下 SQL 查询以获取当前小时发布的文章,假设当前时间是凌晨 5:00。

SELECT * FROM stories WHERE DATE_FORMAT(posted_on, '%H') = HOUR(CURTIME());

此代码片段中的 WHERE 子句比上一个示例中的要复杂一些。现在,让我们分解一下

DATE_FORMAT() 函数是一个 SQL 日期和时间函数,它接受一个日期时间值作为输入,并返回你指定的(有效时间格式)值作为输出。所以,在我们的示例中,post_on 列的值是输入,而 ‘%H’ 是一个格式,它将只返回每行 posted_on 中的小时值。

查询中的另一个时间函数是 HOUR()。此函数仅从 CURTIME() 中提取小时值。

CURTIME() 函数以 小时:分钟:秒 格式返回当前时间。

示例 3:获取 MS SQL 中的当前日期和时间

在这个示例中,我们将说明如何使用 Microsoft SQL Server 获取当前日期和时间。

要获取你 SQL 运行的服务器上的当前日期和时间,请使用以下查询

SELECT GETDATE();

此查询返回当前的日期和时间。例如,在 2022 年 12 月 25 日中午 12 点运行此查询将返回以下结果

2022-12-25 12:00:45

你可以将 GETDATE() 函数与其他日期和时间函数结合使用,执行如从当前日期之前的特定天数获取数据等操作。或者,你也可以反过来获取当前日期之后的数据。

什么是时间序列数据库?

虽然 SQL 日期和时间函数减少了处理日期和时间的复杂性,但仍有一些改进的空间。这就是时间序列数据库的用武之地。

时间序列数据库旨在存储随时间收集的数据,例如,例如,从传感器读取数据的不同时间点的日志。

Time-Series-Database-SQL

时间序列数据库通常有一个用于 时间戳 的列,它存储相对于时间戳的实际数据。例如,它可以存储多个时间点的温度读数。如果我们将此类数据转换为图表,一个轴将表示时间,另一个轴将表示温度。

有了时间序列数据库,从大量记录中查询特定时间点的值就更容易了。

结论

总结一下,本文首先解释了 SQL 日期和时间函数如何使在 SQL 中处理日期和时间变得简单。

然后,我们列出了一些流行 SQL 数据库(MySQL 和 MS SQL Server)的日期和时间函数。

接下来,您了解了如何使用日期和时间函数,以及使用SQL获取当前日期和时间的实际示例。

最后,对于日志记录等用途,您了解到在SQL表中创建日期时间列可能不是最佳解决方案。因此,我们简要介绍了时间序列数据库,它可能比日期时间列更好,因为它将每条记录与时间戳绑定,以及其他一些功能。

关于作者

本文由Pius Aboyi撰写。Pius是一位拥有超过4年Android平台开发经验的移动和Web开发者。他使用Java、Kotlin和PHP编写代码。他热爱撰写关于技术的文章,并为开发者创建教程。