本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
EXTRACT 函數會從 TIMESTAMP、TIMESTAMPTZ、TIME、TIMETZ、INTIVAL YEAR TO MONTH 或 INTERVAL DAY TO SECOND 值傳回日期或時間部分。範例包括時間戳記中的日、月、年、時、分、秒、毫秒或微秒。
語法
EXTRACT(datepart FROM source)
引數
- datepart
-
要擷取的日期或時間的分欄,例如日、月、年、小時、分鐘、秒、毫秒或微秒。對於可能的值,請參閱 日期或時間戳記函數的日期部分。
- source
-
評估為 TIMESTAMP、TIMESTAMPTZ、TIME、TIMETZ、INTIVAL YEAR TO MONTH 或 INTERVAL DAY TO SECOND 資料類型的資料欄或表達式。
傳回類型
如果來源值評估為資料類型 TIMESTAMP、TIME、TIMETZ、INTIVAL YEAR TO MONTH 或 INTERVAL DAY TO SECOND,則為 INTEGER。
如果 source 值計算為資料類型 TIMESTAMPTZ,則為 DOUBLE PRECISION。
TIMESTAMP 範例
下列範例會判斷特價時,售價是 10,000 USD 或更多的週次。此範例使用 TICKIT 資料。如需詳細資訊,請參閱範本資料庫。
select salesid, extract(week from saletime) as weeknum
from sales
where pricepaid > 9999
order by 2;
salesid | weeknum
--------+---------
159073 | 6
160318 | 8
161723 | 26
下列範例會從常值 timestamp 值傳回分鐘值。
select extract(minute from timestamp '2009-09-09 12:08:43');
date_part
-----------
8
下列範例會從常值 timestamp 值傳回毫秒值。
select extract(ms from timestamp '2009-09-09 12:08:43.101');
date_part
-----------
101
TIMESTAMPTZ 範例
下列範例會從常值 timestamptz 傳回年份值。
select extract(year from timestamptz '1.12.1997 07:37:16.00 PST');
date_part
-----------
1997
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 extract(minute from time_val) as minutes from time_test; minutes ----------- 0 0 58
下列範例會擷取每個 time_val 中的小時數。
select extract(hour from time_val) as hours from time_test; hours ----------- 20 0 0
下列範例會從常值值擷取毫秒。
select extract(ms from time '18:25:33.123456'); date_part ----------- 123
TIMETZ 範例
下列範例資料表 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_val 的小時。
select extract(hour from timetz_val) as hours from time_test;
hours
-----------
4
0
5
下列範例會從常值值擷取毫秒。在處理擷取之前,常值不會轉換為 UTC。
select extract(ms from timetz '18:25:33.123456 EST');
date_part
-----------
123
下列範例會從常值 timetz 值傳回 UTC 的時區偏移小時。
select extract(timezone_hour from timetz '1.12.1997 07:37:16.00 PDT');
date_part
-----------
-7
INTERVAL YEAR TO MONTH 和 INTERVAL DAY TO SECOND 的範例
下列範例1
會從 INTERVAL DAY TO SECOND 中擷取 的日部分,該部分定義 36 小時,即 1 天 12 小時。
select EXTRACT('days' from INTERVAL '36 hours' DAY TO SECOND)
date_part
------------------
1
下列範例3
會從 YEAR TO MONTH 中擷取 的月份部分,該部分定義 15 個月,也就是 1 年 3 個月。
select EXTRACT('month' from INTERVAL '15 months' YEAR TO MONTH)
date_part
------------------
3
下列範例會從 6
30 個月擷取 的月份部分,也就是 2 年 6 個月。
select EXTRACT('month' from INTERVAL '30' MONTH)
date_part
------------------
6
下列範例會從 2
50 小時擷取 的小時部分,也就是 2 天 2 小時。
select EXTRACT('hours' from INTERVAL '50' HOUR)
date_part
------------------
2
下列範例會從 11
1 小時 11 分鐘 11.123 秒擷取 的分鐘部分。
select EXTRACT('minute' from INTERVAL '70 minutes 70.123 seconds' MINUTE TO SECOND)
date_part
------------------
11
下列範例會從 1.11
1 天 1 小時 1 分鐘 1.11 秒擷取 的秒部分。
select EXTRACT('seconds' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND)
date_part
------------------
1.11
下列範例會擷取 INTERVAL 中的總時數。每個部分都會擷取並新增至總計。
select EXTRACT('days' from INTERVAL '50' HOUR) * 24 + EXTRACT('hours' from INTERVAL '50' HOUR)
?column?
------------------
50
下列範例會擷取 INTERVAL 中的總秒數。每個部分都會擷取並新增至總計。
select EXTRACT('days' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 86400 +
EXTRACT('hours' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 3600 +
EXTRACT('minutes' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 60 +
EXTRACT('seconds' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND)
?column?
------------------
90061.11