本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
EXTRACT 函數
EXTRACT 函數會從 TIMESTAMP、TIMESTAMPTZ、TIME、TIMETZ、年月到月的 INTERVAL 或年月到秒的 INTERVAL 值傳回日期或時間部分。範例包括時間戳記中的日、月、年、時、分、秒、毫秒或微秒。
語法
EXTRACT(datepart FROM source)
引數
- datepart
-
要擷取的日期或時間的分欄,例如日、月、年、小時、分鐘、秒、毫秒或微秒。對於可能的值,請參閱 日期或時間戳記函數的日期部分。
- source
-
評估為 TIMESTAMP、TIMESTAMPTZ、TIME、TIMETZ、INTIVAL YEAR TO MONTH 或 INTERVAL DAY TO SECOND 資料類型的資料欄或表達式。
傳回類型
如果來源值評估為資料類型 TIMESTAMP、TIME、TIMETZ、間隔年月或間隔日到秒,則為 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
間隔年份到月份和間隔天數到秒的範例
下列範例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