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