比較 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);