Amazon Redshift 自 2025 年 11 月 1 日起不再支援建立新的 Python UDF。如果您想要使用 Python UDF,請在該日期之前建立 UDF。現有 Python UDF 將繼續正常運作。如需詳細資訊,請參閱部落格文章
EXTRACT 函數
EXTRACT 函式會從 TIMESTAMP、TIMESTAMPTZ、TIME、TIMETZ、INTERVAL YEAR TO MONTH 或 INTERVAL DAY TO SECOND 值傳回日期或時間部分。範例包括時間戳記中的日、月、年、時、分、秒、毫秒或微秒。
語法
EXTRACT(datepart FROM source)
引數
- datepart
-
要擷取的日期或時間的分欄,例如日、月、年、小時、分鐘、秒、毫秒或微秒。對於可能的值,請參閱 日期或時間戳記函數的日期部分。
- source
-
評估為 TIMESTAMP、TIMESTAMPTZ、TIME、TIMETZ、INTERVAL YEAR TO MONTH 或 INTERVAL DAY TO SECOND 資料類型的欄或表達式。
傳回類型
如果 source 值評估為資料類型 TIMESTAMP、TIME、TIMETZ、INTERVAL 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 的範例
下列範例會從定義 36 個小時的 INTERVAL DAY TO SECOND 擷取天部分 1,也就是 1 天又 12 小時。
select EXTRACT('days' from INTERVAL '36 hours' DAY TO SECOND)date_part ------------------ 1
下列範例會從定義 15 個月的 YEAR TO MONTH 擷取月部分 3,也就是 1 年又 3 個月。
select EXTRACT('month' from INTERVAL '15 months' YEAR TO MONTH)date_part ------------------ 3
下列範例會從 30 個月擷取月部分 6,也就是 2 年又 6 個月。
select EXTRACT('month' from INTERVAL '30' MONTH)date_part ------------------ 6
下列範例會從 50 個小時擷取小時部分 2,也就是 2 天又 2 小時。
select EXTRACT('hours' from INTERVAL '50' HOUR)date_part ------------------ 2
下列範例會從 1 小時 11 分鐘 11.123 秒擷取分鐘部分 11。
select EXTRACT('minute' from INTERVAL '70 minutes 70.123 seconds' MINUTE TO SECOND)date_part ------------------ 11
下列範例會從 1 天 1 小時 1 分鐘 1.11 秒擷取秒部分 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