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发行版之间可能略有不同。例如,MySQL和SQL Server之间的日期函数的语法和行为可能不同;让我们分别看看几个函数。

sql-curdate-function

1. CURDATE()

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

如何使用CURDATE()函数

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

SELECT CURDATE();

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

strong>CURDATE()函数在strong>WHERE子句中有一个更实用的应用。例如,您可以使用它来获取所有日期值等于当前日期的表中的行。以下查询显示了如何做到这一点

SELECT * from goods WHERE expiry_date = CURDATE();

2. EXTRACT()

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

如何使用EXTRACT()函数

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

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

运行此查询返回strong>12,代表12月。

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

在MySQL中,strong>DAY()strong>MONTH()strong>YEAR()函数分别只从日期中提取天、月和年。您可以看到,这些函数是上一个示例中提取函数的更具体替代品

如何使用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中的strong>DATE_ADD()函数允许您指定一个日期以及您希望添加到该日期的间隔。然后它将返回该间隔的完整日期。间隔可以是天、月、年,甚至是时间值,如小时或分钟。

如何使用DATE_ADD()

要向当前天添加五天,运行以下查询

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

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

5. DATE_SUB()

正如其名所示,strong>DATE_SUB()从输入的日期中减去指定的间隔。MySQL的strong>DATE_SUB()strong>DATE_ADD()的相反操作。

如何使用DATE_SUB()

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

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

6. DATEDIFF()

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

如何使用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 完整的月份名称(例如一月,四月等)
%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是一位拥有超过4年Android平台开发经验的移动和Web开发者。他使用Java、Kotlin和PHP编写代码。他热爱撰写关于技术的文章和为开发者创建教程。