本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
EXTRACT 函數
EXTRACT 函數從 TIMESTAMP、TIMESTAMPTZ、TIME 或 TIMETZ 值傳回日期或時間部分。範例包括時間戳記中的日、月、年、時、分、秒、毫秒或微秒。
語法
EXTRACT(datepart FROM source)
引數
- datepart
-
要擷取的日期或時間的分欄,例如日、月、年、小時、分鐘、秒、毫秒或微秒。對於可能的值,請參閱 日期或時間戳記函數的日期部分。
- source
-
評估為 TIMESTAMP、TIMESTAMPTZ、TIME 或 TIMETZ 資料類型的欄或運算式。
傳回類型
如果 source 值的計算結果為資料類型 TIMESTAMP、TIME 或 TIMETZ,則為 INTEGER。
如果 source 值計算為資料類型 TIMESTAMPTZ,則為 DOUBLE PRECISION。
TIMESTAMP 範例
下列範例會判斷特價時,售價是 10,000 USD 或更多的週次。
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 --
下列範例會從常值 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