SQL 日期函数:详细指南
作者:社区 / 用例
2023 年 4 月 14 日
导航至
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 之间的日期函数的语法和行为可能有所不同;让我们看看每个发行版中的一些函数。
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() 的替代方案。因此,它允许您为日期输出指定格式。
什么是时间序列数据库?
时间序列数据库 (TSDB) 是一种特殊类型的数据库,用于存储在一段时间内收集的数据。例如,它可能包含一天中多个特定时间的温度读数数据。这种类型的数据库非常适合存储大型数据集,如日志。
TSDB 通常将数据存储为一对,由时间和值组成(例如,温度)。因此,如果您将时间序列数据库中的数据绘制成图表,则一个轴代表时间,另一个轴代表测量值(例如,温度)。
在您拥有大量值和关联时间戳的情况下,您可能需要考虑使用时间序列数据库来代替带有日期时间列的常规 SQL 表。
总结一切
在本文中,我们提供了有关 SQL 日期函数的详细指南,您了解了几个以解决问题的方式操作日期的 SQL 函数。
我们介绍了十个 SQL 日期函数。SQL 日期函数在不同的 SQL 发行版(如 MySQL 和 SQL Server)之间可能有所不同。我们在本文中描述的前七个示例是 MySQL 的日期函数,而其余示例是 SQL Server 特有的。
关于作者
这篇文章由 Pius Aboyi 撰写。Pius 是一位移动和 Web 开发人员,拥有超过 4 年的 Android 平台开发经验。他使用 Java、Kotlin 和 PHP 编写代码。他喜欢撰写有关技术的文章,并为开发人员创建操作指南教程。