SQL 日期函数:详细指南

导航至

sql-date-functions

SQL 提供了一种日期类型,开发人员可以使用它来存储日期值。此外,为了简化日期处理,SQL 提供了几个日期函数,用于检索、格式化和操作日期。

在本文中,您将了解一些 SQL 日期函数以及如何使用它们。

为什么日期操作在 SQL 中很重要

在我们了解各种 SQL 日期函数之前,让我们先看看您可能需要在 SQL 中操作日期的一些原因。

日期是数据,经过处理后,可以变成更清晰的信息。例如,日期 20/02/2023。您可以对其进行处理,使其读作 2023 年 2 月 20 日,这对我们人类来说更清晰、更易读。此外,您可以处理上述日期数据,以找出 20 日是星期几。

通过 SQL 中的日期操作,您可以更改上述日期的格式以满足特定要求。例如,您可以先显示月份再显示日期,或者显示完整的月份名称而不是整数。

您还可以通过仅提取日期的某些部分(如年份、月份或日期)来操作日期。

有时,您可能需要计算相对于特定日期的未来日期或过去日期。也就是说,您可能希望 SQL 告诉您从当前日期起一个月后的日期。同样,您可以使用 SQL 日期函数来操作当前日期,使其返回一个月前的日期。要操作当前日期,您需要添加或减去所需的天数。

这种操作日期的能力使您可以扩展 SQL 应用程序执行的功能,而无需依赖其他工具或编程语言。

如何在 SQL 中编写日期?

这个问题的简单答案是,您可以在表中创建一个日期时间类型列。

SQL 有多种编写日期的格式,您可以使用一个或多个日期函数来确定您需要的类型的正确格式。例如,MySQL 中的当前日期函数默认返回以下格式的日期

Year-Month-Day

按照上述格式,有效日期将如下所示:2023-02-28。

SQL 日期函数示例

在本节中,我们将讨论一些 SQL 日期函数以及如何使用它们。值得一提的是,SQL 日期函数在一个 SQL 发行版到另一个 SQL 发行版之间略有不同。例如,MySQL 和 SQL Server 之间的日期函数的语法和行为可能有所不同;让我们看看每个发行版中的一些函数。

sql-curdate-function

1. CURDATE()

MySQL 中的 CURDATE() 日期函数返回当前日期。假设今天是 3 月 1 日,它将返回今天的日期,格式如下:2023-03-01。

如何使用 CURDATE() 函数

要在 MySQL 中获取当前日期,只需运行以下查询

SELECT CURDATE();

此代码始终返回当前日期。

CURDATE() 函数更实际的用法是在 WHERE 子句中。例如,您可以使用它从表中获取日期值等于当前日期的所有行。以下查询显示了如何执行此操作

SELECT * from goods WHERE expiry_date = CURDATE();

2. EXTRACT()

有时您可能希望操作日期数据,以便仅保留日期的一部分。EXTRACT() 函数在 MySQL 中正是这样做的——您可以使用它来提取月份、日期或年份。

如何使用 EXTRACT() 函数

要仅从日期中提取月份,请运行以下查询

SELECT EXTRACT(MONTH FROM '2020-12-02');

运行此查询返回 12,表示十二月。

3. DAY()、MONTH() 和 YEAR()

在 MySQL 中,DAY()MONTH()YEAR() 函数分别从日期中仅提取日、月或年。您可以看到这些函数是上一个示例中 extract 函数的更具体的替代方案

如何使用 Day()、Month() 和 Year()

以下查询显示了如何使用 DAY()、MONTH() 和 YEAR() 函数

SELECT DAY('2020-12-02');

SELECT MONTH('2020-12-02');

SELECT YEAR('2020-12-02');

4. DATE_ADD()

MySQL 中的 DATE_ADD() 函数允许您指定日期和要添加到该日期的间隔。然后,它返回该间隔的完整日期。间隔可以是 DAY、MONTH、YEAR,甚至可以是时间值,例如小时或分钟。

如何使用 DATE_ADD()

要将五天添加到当前日期,请运行以下查询

SELECT DATE_ADD(CURDATE(), INTERVAL 5 DAY);

如果在执行时当前日期是 3 月 1 日,则上述查询返回 2023-03-06

5. DATE_SUB()

顾名思义,DATE_SUB() 从日期输入中减去指定的间隔。MySQL 的 DATE_SUB()DATE_ADD() 的逆运算。

如何使用 DATE_SUB()

运行以下查询以获取比当前日期早五天的日期

SELECT DATE_SUB(CURDATE(), INTERVAL 5 DAY);

6. DATEDIFF()

您可以使用 DATEDIFF() 函数在 MySQL 中减去两个日期。您在函数内部提供日期作为参数,它返回差值。返回值可以是正数或负数,具体取决于参数。

如何使用 DATEDIFF()

让我们计算今天和去年圣诞节之间的差值。为此,请运行以下查询

SELECT DATEDIFF(CURDATE(), '2022-12-25');

运行上述查询应返回自圣诞节以来经过的天数。

7. DATE_FORMAT()

此函数允许您在 MySQL 中操作日期的格式。它需要日期和格式字符串作为参数。格式字符串使用说明符来确定如何显示日、月和年。下表显示了一些日期说明符

说明符 描述
%a 工作日缩写(例如 Mon、Tue、Wed)
%b 月份缩写(例如 Jan、Feb、Dec)
%c 月份整数 (1-12)
%d 月份中的日 (1-31)
%D 带后缀的月份中的日(1st、2nd、3rd...)
%m 月份整数 (1-12)
%M 完整月份名称(January、April 等)
%y 两位数年份
%Y 四位数年份

如何在 MySQL 中格式化日期

要格式化日期,请像这样运行 DATE_FORMAT() 函数

SELECT DATE_FORMAT(CURDATE(), '%D %b, %Y');

根据说明符表中的内容,此代码显示 1st Mar, 2023。这样,我们成功更改了当前日期函数返回的默认日期格式,并将其重新格式化为更易读的英文日期。

8. GETDATE()

在 SQL Server 中,GETDATE() 函数返回当前日期和时间。此函数的工作方式与 MySQL 中的 CURDATE() 函数非常相似,只是它还在输出中包含时间。

您可以通过简单地运行以下查询来使用 GETDATE()

SELECT GETDATE();

9. DATEADD()

您可以使用 DATEADD() 函数在 SQL Server 中从日期中添加或减去日期间隔。它的作用与 MySQL DATE_ADD()DATE_SUB() 函数相同。您可以通过在间隔整数中添加负号来指定减法

以下查询显示了如何使用此函数来减去日期

DATEADD(day, -5, '2023-03-01')

10. CONVERT()

CONVERT() 函数是 SQL Server 中 DATE_FORMAT() 的替代方案。因此,它允许您为日期输出指定格式。

what-is-a-time-series-database

什么是时间序列数据库?

时间序列数据库 (TSDB) 是一种特殊类型的数据库,用于存储在一段时间内收集的数据。例如,它可能包含一天中多个特定时间的温度读数数据。这种类型的数据库非常适合存储大型数据集,如日志。

TSDB 通常将数据存储为一对,由时间和值组成(例如,温度)。因此,如果您将时间序列数据库中的数据绘制成图表,则一个轴代表时间,另一个轴代表测量值(例如,温度)。

在您拥有大量值和关联时间戳的情况下,您可能需要考虑使用时间序列数据库来代替带有日期时间列的常规 SQL 表。

总结一切

在本文中,我们提供了有关 SQL 日期函数的详细指南,您了解了几个以解决问题的方式操作日期的 SQL 函数。

我们介绍了十个 SQL 日期函数。SQL 日期函数在不同的 SQL 发行版(如 MySQL 和 SQL Server)之间可能有所不同。我们在本文中描述的前七个示例是 MySQL 的日期函数,而其余示例是 SQL Server 特有的。

关于作者

这篇文章由 Pius Aboyi 撰写。Pius 是一位移动和 Web 开发人员,拥有超过 4 年的 Android 平台开发经验。他使用 Java、Kotlin 和 PHP 编写代码。他喜欢撰写有关技术的文章,并为开发人员创建操作指南教程。