本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
EXTRACT 函數
該 EXTRACT 函數從時間戳,TIMSTAMPTZ,時間,時間,時間,間隔年到月,或間隔天到第二個值返回日期或時間部分。範例包括時間戳記中的日、月、年、時、分、秒、毫秒或微秒。
語法
EXTRACT(datepart FROM source)
引數
- datepart
-
要擷取的日期或時間的分欄,例如日、月、年、小時、分鐘、秒、毫秒或微秒。對於可能的值,請參閱 日期或時間戳記函數的日期部分。
- source
-
評估為「時間戳記」、「TIMESTAMPTZ」、「時間」、「時間」、「時間」、「年到月的間隔」或「從日到秒的間隔」資料類型的資料欄或運算式。
傳回類型
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
具有間隔年到月和間隔日到第二的例子
下列範例會擷取定義 36 小時 (即 1 天 12 小時) 的1
間隔天到秒的第二天部分。
select EXTRACT('days' from INTERVAL '36 hours' DAY TO SECOND)
date_part ------------------ 1
下列範例會3
從定義 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
下列範例會擷取間隔中的總秒數。每個零件都被萃取並加入到總計中。
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