EXTRACT 函數 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

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