举例说明什么是MySQL中的dateiff函数

439 阅读3分钟

MySQL是世界上最流行的数据库之一。无论在哪个行业,MySQL都因其功能而被广泛采用。它是一个开源的RDBMS(关系型数据库管理系统)。数据被组织成可以相互关联的表。它结合了SQL来执行各种数据库操作。

在本指南中,我们将检查一个这样的功能。它将演示如何使用MySQL中的DATEDIFF函数。

SQL中的DATEDIFF()

DATEDIFF函数是作为SQL查询语言的一部分提供的。在MySQL中,函数DATEDIFF()将两个日期作为输入,计算其差异,并返回两个日期之间的日期数。

下面是这个函数的基本结构的样子。

$ DATEDIFF(expression_1,expression_2)

这里:

  • expression_1:第一个日期
  • 表达式_2:第二个日期

该表达式可以是以下任何一种格式。

  • 时间
  • 日期
  • 数据时间
  • datetime2
  • 小日期
  • 数据时间偏移

然而,在标准SQL中,DATEDIFF()略有不同。它还支持一个额外的参数来指定要处理的日期部分。

$ DATEDIFF(date_part,expression_1,expression_2)

date_part。描述了函数应该在哪个日期部分进行计算。默认情况下,该值被设置为天。然而,它也支持额外的值。这些date_part值也有合适的缩写。

  • 月("mm "或 "m")
  • 年("yy "或 "yyyy")。
  • 季度("qq "或 "q")。
  • 日("dd "或 "d")。
  • 周("wk "或 "ww")。
  • 年的一天("dy "或 "y")。
  • 小时("hh")
  • 分钟("mi "或 "m")
  • 秒("ss "或 "s")。
  • 毫秒("ms")
  • 微秒("mcs")
  • 纳秒("ns")。

函数DATEDIFF()也有一个范围限制。日期差的计算值必须在整数范围内(-2,147,483,647到2,147,483,648)。

DATEDIFF()的用法

在本节中,我们将检查使用该函数的各种方法。为了演示,用phpMyAdmin设置一个MySQL服务器以方便使用。

基本用法

从SQL标签,运行以下查询。

$ SELECT DATEDIFF('2090-10-11', '2020-10-10') AS 'Result';

如输出结果所示,指定日期之间的差异是25568天。

与一个较早的日期进行比较

如果第二个日期比第一个日期晚呢?交换一下数值并测试一下。

$ SELECT DATEDIFF('2020-10-10', '2090-10-11') AS 'Result';

我们可以看到,它仍然显示25568天。然而,这个值是负的。当在任何SQL脚本/查询中实现这个函数时,这是一个关键的区别,要牢记。

数据时间值

DATEDIFF()函数也接受数据时间值作为参数。时间值应该是24小时的格式。

$ SELECT DATEDIFF('2090-10-11 23:59:59', '2020-10-10 00:00:00') AS 'Result_1';

$ SELECT DATEDIFF('2090-10-11 00:00:00', '2020-10-10 23:59:59') AS 'Result_2';

注意,额外的时间值并不影响计算结果。该函数只关注日期。

处理错误的日期值

如果日期值是错误的,那么DATEDIFF()将返回NULL值。为了展示,在任一参数中输入一个无效的日期。

$ SELECT DATEDIFF('2099-99-99', '2020-20-20') AS 'Result'

正如预期的那样,返回值是NULL。

将DATEDIFF()与CURDATE()相结合

函数CURDATE()返回机器的当前日期。它不需要任何参数。

使用CURDATE(),我们可以找到现在和目标日期之间的差异。例如,让我们将当前日期与过去的某一天进行比较。

$ SELECT DATEDIFF(CURDATE(), '1980-10-10') AS 'Result'

$ SELECT DATEDIFF('2077-01-01', CURDATE()) AS 'Result'

注意,还有一些额外的函数,例如CURRENT_DATE(),其作用与CURDATE()相同。在某些情况下,它们都可以互换。

$ SELECT DATEDIFF(CURRENT_DATE(), '1980-10-10') AS 'Result'

在表格中使用DATEDIFF()

到目前为止,我们已经实现了简单的DATEDIFF()命令来演示其用途。现在是把它付诸行动的时候了。

我抓了一个样本数据库,其中包含某个公司及其雇员的各种信息,用于演示。这个样本数据库可以从这里直接获得。我们将从这个数据库中选择员工的姓和名,并找出他们到现在为止工作了多长时间。

$ SELECT first_name, last_name, DATEDIFF(CURDATE(), hire_date) AS 'days worked' FROM employees;

最后的思考

本指南成功演示了MySQL中DATEDIFF()函数的用法。它计算了两个日期之间的差异,并将该值作为天数返回。所有的演示都有助于理解DATEDIFF函数的工作过程。