在本教學中,您將學習如何使用MySQL DATEDIFF
函數來計算兩個日期值之間的天數。
MySQL DATEDIFF函數介紹
MySQL DATEDIFF
函數計算兩個DATE,DATETIME或TIMESTAMP值之間的天數。
MySQL DATEDIFF
函數的語法如下:
DATEDIFF(date_expression_1,date_expression_2);
DATEDIFF
函數接受兩個任何有效日期或日期時間值的參數。如果您傳遞DATETIME
或TIMESTAMP
值,則DATEDIFF
函數僅將日期部分用於計算,並忽略時間部分。
DATEDIFF
函數在許多情況下很有用,例如,您可以計算產品需要發送給客戶的間隔時間。
MySQL DATEDIFF示例
我們來看一下使用DATEDIFF
函數的一些例子。
示例-1
mysql> SELECT DATEDIFF('2017-08-17','2017-08-17');
+-------------------------------------+
| DATEDIFF('2017-08-17','2017-08-17') |
+-------------------------------------+
| 0 |
+-------------------------------------+
1 row in set
示例-2
mysql> SELECT DATEDIFF('2017-08-17','2017-08-08');
+-------------------------------------+
| DATEDIFF('2017-08-17','2017-08-08') |
+-------------------------------------+
| 9 |
+-------------------------------------+
1 row in set
示例-3
mysql> SELECT DATEDIFF('2017-08-08','2017-08-17');
+-------------------------------------+
| DATEDIFF('2017-08-08','2017-08-17') |
+-------------------------------------+
| -9 |
+-------------------------------------+
1 row in set
請參閱示例資料庫(zaixiandb)中的以下orders
表,其結構如下 -
mysql> desc orders;
+----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+-------+
| orderNumber | int(11) | NO | PRI | NULL | |
| orderDate | date | NO | | NULL | |
| requiredDate | date | NO | | NULL | |
| shippedDate | date | YES | | NULL | |
| status | varchar(15) | NO | | NULL | |
| comments | text | YES | | NULL | |
| customerNumber | int(11) | NO | MUL | NULL | |
+----------------+-------------+------+-----+---------+-------+
7 rows in set
假設使用DATEDIFF
函數計算所需日期和訂單發貨日期之間的天數,如下所示:
SELECT
orderNumber,
DATEDIFF(requiredDate, shippedDate) daysLeft
FROM
orders
ORDER BY daysLeft DESC;
執行上面查詢語句,得到以下結果 -
+-------------+----------+
| orderNumber | daysLeft |
+-------------+----------+
| 10409 | 11 |
| 10410 | 10 |
| 10105 | 9 |
| 10135 | 9 |
| 10190 | 9 |
**** 此處省略了一大小波數據 ********
| 10423 | NULL |
| 10424 | NULL |
| 10425 | NULL |
+-------------+----------+
327 rows in set
以下語句將獲取狀態正在處理(In Process
)的所有訂單,並計算訂單日期和所需日期之間的天數:
SELECT
orderNumber,
DATEDIFF(requiredDate, orderDate) remaining_days
FROM
orders
WHERE
status = 'In Process'
ORDER BY remaining_days;
執行上面查詢語句,得到以下結果 -
+-------------+----------------+
| orderNumber | remaining_days |
+-------------+----------------+
| 10426 | 5 |
| 10423 | 6 |
| 10425 | 7 |
| 10421 | 8 |
| 10424 | 8 |
| 10420 | 9 |
| 10422 | 12 |
+-------------+----------------+
7 rows in set
要計算周或月作為間隔時間,可以將DATEDIFF
函數的返回值除以7
或30
,如下查詢語句:
SELECT
orderNumber,
ROUND(DATEDIFF(requiredDate, orderDate) / 7, 2) as weeks,
ROUND(DATEDIFF(requiredDate, orderDate) / 30,2) as months
FROM
orders
WHERE
status = 'In Process';
執行上面查詢語句,得到以下結果 -
+-------------+-------+--------+
| orderNumber | weeks | months |
+-------------+-------+--------+
| 10420 | 1.29 | 0.3 |
| 10421 | 1.14 | 0.27 |
| 10422 | 1.71 | 0.4 |
| 10423 | 0.86 | 0.2 |
| 10424 | 1.14 | 0.27 |
| 10425 | 1 | 0.23 |
| 10426 | 0.71 | 0.17 |
+-------------+-------+--------+
7 rows in set
請注意,ROUND
函數用於舍入結果。
在本教學中,您已經學習了如何使用MySQL DATEDIFF
函數來計算兩個日期值之間的天數。
上一篇:
MySQL函數
下一篇:
MySQL+Node.js連接和操作