如何在 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)
牛奶 2023-01-04 2023-02-24
调味料块 2022-02-14 2023-02-24
玉米片 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

title(类型:varchar) body(类型:varchar) posted_on(类型: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() 函数以 hour:minutes:seconds 格式返回当前时间。

示例 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 是一名移动和 Web 开发者,拥有超过 4 年的 Android 平台构建经验。他使用 Java、Kotlin 和 PHP 编写代码。他喜欢撰写有关技术的文章,并为开发者创建操作指南教程。