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函数的工作过程。