DATEDIFF() 函數
定義和用法
DATEDIFF() 函數傳回兩個日期之間的時間。
文法
DATEDIFF(datepart,startdate,enddate)
startdate 和 enddate 參數是合法的日期表達式。
datepart 參數可以是下列的值:
atepart | 縮寫 |
---|---|
年 | yy, yyyy |
季度 | qq, q |
月 | mm, m |
年中的日 | dy, y |
日 | dd, d |
周 | wk, ww |
星期 | dw, w |
小時 | hh |
分鐘 | mi, n |
秒 | ss, s |
毫秒 | ms |
微妙 | mcs |
納秒 | ns |
執行個體
例子 1
使用如下 SELECT 語句:
SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate
結果:
DiffDate |
---|
1 |
例子 2
使用如下 SELECT 語句:
SELECT DATEDIFF(day,'2008-12-30','2008-12-29') AS DiffDate
結果:
DiffDate |
---|
-1 |
Date 函數
SQL 日期
當我們處理日期時,最難的任務恐怕是確定所插入的日期的格式,與資料庫中日期列的格式相比對。
隻要資料包含的隻是日期部分,運作查詢就不會出問題。但是,如果涉及時間,情況就有點複雜了。
在讨論日期查詢的複雜性之前,我們先來看看最重要的内建日期處理函數。
MySQL Date 函數
下面的表格列出了 MySQL 中最重要的内建日期函數:
函數 | 描述 |
---|---|
NOW() | 傳回目前的日期和時間 |
CURDATE() | 傳回目前的日期 |
CURTIME() | 傳回目前的時間 |
DATE() | 提取日期或日期/時間表達式的日期部分 |
EXTRACT() | 傳回日期/時間按的單獨部分 |
DATE_ADD() | 給日期添加指定的時間間隔 |
DATE_SUB() | 從日期減去指定的時間間隔 |
DATEDIFF() | 傳回兩個日期之間的天數 |
DATE_FORMAT() | 用不同的格式顯示日期/時間 |
SQL Server Date 函數
下面的表格列出了 SQL Server 中最重要的内建日期函數:
函數 | 描述 |
---|---|
GETDATE() | 傳回目前日期和時間 |
DATEPART() | 傳回日期/時間的單獨部分 |
DATEADD() | 在日期中添加或減去指定的時間間隔 |
DATEDIFF() | 傳回兩個日期之間的時間 |
CONVERT() | 用不同的格式顯示日期/時間 |
SQL Date 資料類型
MySQL 使用下列資料類型在資料庫中存儲日期或日期/時間值:
- DATE - 格式 YYYY-MM-DD
- DATETIME - 格式: YYYY-MM-DD HH:MM:SS
- TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
- YEAR - 格式 YYYY 或 YY
SQL Server 使用下列資料類型在資料庫中存儲日期或日期/時間值:
- DATE - 格式 YYYY-MM-DD
- DATETIME - 格式: YYYY-MM-DD HH:MM:SS
- SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS
- TIMESTAMP - 格式: 唯一的數字
SQL 日期處理
如果不涉及時間部分,那麼我們可以輕松地比較兩個日期!
假設我們有下面這個 "Orders" 表:
OrderId | ProductName | OrderDate |
---|---|---|
1 | computer | 2008-12-26 |
2 | printer | 2008-12-26 |
3 | electrograph | 2008-11-12 |
4 | telephone | 2008-10-19 |
現在,我們希望從上表中選取 OrderDate 為 "2008-12-26" 的記錄。
我們使用如下 SELECT 語句:
SELECT * FROM Orders WHERE OrderDate='2008-12-26'
結果集:
OrderId | ProductName | OrderDate |
---|---|---|
1 | computer | 2008-12-26 |
3 | electrograph | 2008-12-26 |
現在假設 "Orders" 類似這樣(請注意 "OrderDate" 列中的時間部分):
OrderId | ProductName | OrderDate |
---|---|---|
1 | computer | 2008-12-26 16:23:55 |
2 | printer | 2008-12-26 10:45:26 |
3 | electrograph | 2008-11-12 14:12:08 |
4 | telephone | 2008-10-19 12:56:10 |
如果我們使用上面的 SELECT 語句:
SELECT * FROM Orders WHERE OrderDate='2008-12-26'
那麼我們得不到結果。這是由于該查詢不含有時間部分的日期。
提示:如果您希望使查詢簡單且更易維護,那麼請不要在日期中使用時間部分!