比较 MySQL 中的两个日期
这篇文章解释了在 MySQL 中比较两个日期。有三种不同的方法来完成这项任务。
- 使用
WHERE
子句 - 使用
BETWEEN
运算符 - 使用
DATE_ADD
函数
创建表并插入值
首先,我将为员工创建一个表
Create table employee (empid int primary key, fname varchar(10), lname varchar(20), logindate timestamp not null default CURRENT_TIMESTAMP);
现在,我将在表中插入一些值进行演示。
INSERT INTO employee('empid', 'fname', 'lname')VALUES (1,'aaa','bbb');
INSERT INTO employee VALUES
(201,'Peter','Parker','2001-01-01 16:15:00'),
(202,'Thor','Odinson','2021-08-02 12:15:00'),
(204,'Loki','Laufeyson','2009-08-03 10:43:24');
使用 WHERE
子句比较两个日期
下面的查询是一种非常简单的方法,使用 SELECT
查询提取给定日期范围之间的所有记录。
SELECT * FROM employee WHERE logindate >= '2000-07-05' AND logindate < '2011-11-10';
使用 BETWEEN
运算符比较两个日期
首先,我们必须在 MySQL 中将日期转换为字符串。为了完成此任务,我们将使用 DATE 函数从 Datetime 中提取日期。
DATE 函数的语法如下。
DATE(column name)
如果你希望利用 logindate 列上的索引,你可以试试这个。之间运算符还可用于选择在两个指定日期表达式之间具有日期列的所有记录。
SELECT * FROM employee WHERE DATE(logindate) BETWEEN '2000-07-05' AND '2011-11-10';
MySQL 只允许一种 yyyy-mm-dd
日期格式,因此每当你需要格式化任何字符串日期表达式时,你都必须使用这种格式。
现在,你可能有疑问,相比之下,DATE() 函数的需求是什么?
因此,MySQL DATE() 函数从你的 DATETIME 或 TIMESTAMP 列中提取日期部分到一个字符串中,如下所示:
mysql> SELECT DATE('2005-08-28 01:02:03'); -> '2005-08-28'
使用 DATE()
函数,MySQL 将只考虑列值的日期部分进行比较。当你不使用 DATE()
函数时,MySQL 会将你的列的时间部分与你的字符串表达式进行比较。使用此选项,任何比较都将包含指定的字符串表达式作为结果集的一部分
当将 DATETIME 或 TIME-STAMP 列与代表日期的字符串进行比较时,如上面的查询,MySQL 会将列值和表达式值都转换为长整数类型进行比较。
这就是即使你将日期列与字符串进行比较,也不需要手动将日期列值转换为字符串的原因。
使用 DATE_ADD
函数比较两个日期
另一种方法是使用 DATE_ADD()
函数。虽然,这种方法不一定需要 DATE_ADD()
函数。但是,如果你想考虑在所需日期之后的几分钟作为解决方案的一部分,你可以使用它。例如,如果我想要给定日期范围之间的所有记录,但可以考虑在指定限制后 15 分钟插入的记录。这个功能非常有用。
DATE_ADD() 函数用于将指定的时间或日期间隔添加到给定日期,然后返回日期。DATE_ADD 函数有两个参数,第一个参数是日期,第二个是要添加的间隔
select * from employee
where logindate between '2000-07-05' and DATE_ADD('2011-07-10',INTERVAL 15 MINUTE);