本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
DATEDIFF 函數
DATEDIFF 傳回兩個日期或時間表達式之日期部分的差異。
語法
DATEDIFF ( datepart, {date|time|timetz|timestamp}, {date|time|timetz|timestamp} )
引數
- datepart
-
函數運作的日期或時間值 (年、月或日、小時、分鐘、秒、毫秒或微秒) 的特定部分。如需詳細資訊,請參閱 日期或時間戳記函數的日期部分。
特別是,DATEDIFF 會決定兩個運算式間相距的日期部分邊界數。例如,假設您正在計算兩個日期
12-31-2008
和01-01-2009
之間的年度差異。在這種情況下,函數傳回 1 年,儘管這些日期只相隔一天。如果您正在尋找兩個時間戳記間時數的差異,01-01-2009 8:30:00
和01-01-2009 10:00:00
,結果為 2 小時。如果您正在尋找兩個時間戳記間時數的差異,8:30:00
和10:00:00
,結果為 2 小時。 - date|time|timetz|timestamp
-
DATE、TIME、TIMETZ 或 TIMESTAMP 欄,或隱含轉換為 DATE、TIME、TIMETZ 或 TIMESTAMP 的運算式。運算式必須同時包含指定的日期部分或時間部分。如果第二個日期或時間晚於第一個日期或時間,結果為正值。如果第二個日期或時間早於第一個日期或時間,結果為負值。
傳回類型
BIGINT
具有 DATE 欄的範例
下列範例會尋找在兩個常值日期值間週次的差異。
select datediff(week,'2009-01-01','2009-12-31') as numweeks; numweeks ---------- 52 (1 row)
下列範例會尋找兩個常值日期值之間的差異 (以小時為單位)。如果您未提供日期的時間值,則預設值為 00:00:00。
select datediff(hour, '2023-01-01', '2023-01-03 05:04:03'); date_diff ---------- 53 (1 row)
下列範例會尋找兩個常值 TIMESTAMETZ 值之間的差異 (以天為單位)。
Select datediff(days, 'Jun 1,2008 09:59:59 EST', 'Jul 4,2008 09:59:59 EST')
date_diff ---------- 33
以下範例找出資料表中同一列兩個日期之間的差異 (以天為單位)。
select * from date_table; start_date | end_date -----------+----------- 2009-01-01 | 2009-03-23 2023-01-04 | 2024-05-04 (2 rows) select datediff(day, start_date, end_date) as duration from date_table; duration --------- 81 486 (2 rows)
下列範例會尋找在過去和今日日期中常值間季次的差異。此範例假設目前日期為 2008 年 6 月 5 日。您可以用全名或縮寫來表示日期部分。DATEDIFF 函數的預設欄名稱為 DATE_DIFF。
select datediff(qtr, '1998-07-01', current_date); date_diff ----------- 40 (1 row)
下列範例會聯結 SALES 和 LISTING 資歷表,來計算在他們列出和門票售出後所經的天數:清單 1000 到 1005。這些清單銷售的最長等待時間是 15 天,而最短時間是不到一天 (0 天)。
select priceperticket, datediff(day, listtime, saletime) as wait from sales, listing where sales.listid = listing.listid and sales.listid between 1000 and 1005 order by wait desc, priceperticket desc; priceperticket | wait ---------------+------ 96.00 | 15 123.00 | 11 131.00 | 9 123.00 | 6 129.00 | 4 96.00 | 4 96.00 | 0 (7 rows)
此範例會計算賣家等待所有門票特價的平均小時數。
select avg(datediff(hours, listtime, saletime)) as avgwait from sales, listing where sales.listid = listing.listid; avgwait --------- 465 (1 row)
具有 TIME 欄的範例
下列範例資料表 TIME_TEST 有一個 TIME_VAL 欄 (類型為 TIME),其中插入了三個值。
select time_val from time_test; time_val --------------------- 20:00:00 00:00:00.5550 00:58:00
下列範例會尋找 TIME_VAL 欄與時間常值之間的小時數差異。
select datediff(hour, time_val, time '15:24:45') from time_test; date_diff ----------- -5 15 15
下列範例會尋找兩個常值時間值之間的分鐘數差異。
select datediff(minute, time '20:00:00', time '21:00:00') as nummins; nummins ---------- 60
具有 TIMTZ 欄的範例
下列範例資料表 TIMETZ_TEST 有一個 TIMETZ_VAL 欄 (類型為 TIMETZ),其中插入了三個值。
select timetz_val from timetz_test; timetz_val ------------------ 04:00:00+00 00:00:00.5550+00 05:58:00+00
下列範例會尋找 TIMETZ 常值與 timetz_val 之間的小時數差異。
select datediff(hours, timetz '20:00:00 PST', timetz_val) as numhours from timetz_test; numhours ---------- 0 -4 1
下列範例會尋找兩個常值 TIMTZ 值之間的小時數差異。
select datediff(hours, timetz '20:00:00 PST', timetz '00:58:00 EST') as numhours; numhours ---------- 1