如何在 SQL 中获取当前日期和时间
作者:社区 / 开发者
2023 年 3 月 20 日
导航到
本文由 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 中获取当前日期和时间
此时,您已经了解了 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();
对于上述数据集,查询将返回以下结果
这里发生的事情是 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 日期和时间函数在一定程度上降低了处理日期和时间的复杂性,但仍有改进的空间。这就是时间序列数据库的用武之地。
时间序列数据库旨在存储随时间收集的数据,例如,来自传感器的日志,传感器在不同的时间点读取数据。
时间序列数据库通常有一个 时间戳 列,它存储相对于时间戳的实际数据。例如,它可以存储多个时间点的温度读数。如果我们将这种类型的数据转换为图形,一个轴将指示时间,另一个轴将指示温度。
使用时间序列数据库,可以更轻松地从大型记录中查询特定时间点的值。
结论
总结一下,让我们回顾一下本文中涵盖的所有内容。首先,我们解释了 SQL 日期和时间函数使在 SQL 中处理日期和时间变得容易。
然后,我们列出了两个流行的 SQL 数据库(MySQL 和 MS SQL Server)的一些日期和时间函数。
接下来,您看到了可以使用日期和时间函数的方法,以及在 SQL 中获取当前日期和时间的实际示例。
最后,对于日志记录等用途,您了解到在 SQL 表中创建日期时间列可能不是最佳解决方案。因此,我们对时间序列数据库进行了简单的介绍,这可能比日期时间列更好,因为它将每个记录绑定到时间戳以及其他功能。
关于作者
本文由 Pius Aboyi 撰写。Pius 是一名移动和 Web 开发者,拥有超过 4 年的 Android 平台构建经验。他使用 Java、Kotlin 和 PHP 编写代码。他喜欢撰写有关技术的文章,并为开发者创建操作指南教程。