日期或時間戳記函數的日期部分 - Amazon Redshift

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

日期或時間戳記函數的日期部分

下表識別日期部分和時間部分名稱和縮寫,系統接受它們做為以下函數的引數:

  • DATEADD

  • DATEDIFF

  • DATE_PART

  • EXTRACT

日期部分或時間部分 縮寫
millennium, millennia mil, mils
century, centuries c, cent, cents
decade, decades dec, decs
epoch epoch (由 EXTRACT 支援)
year, years y, yr, yrs
quarter, quarters qtr, qtrs
month, months mon, mons
week, weeks

w

週中的日

dayofweek, dow, dw, weekday (由 DATE_PART EXTRACT 函數 所支援)

傳回從 0–6 的整數,從星期日開始。

注意

DOW 日期部分與週中的日 (日期部分用來表示日期時間格是字串) 表現不同 (D)。D 是基於整數 1–7,其中星期日為 1。如需詳細資訊,請參閱 日期時間格式字串

年中的日 dayofyear, doy, dy, yearday (由 EXTRACT 支援)
day, days d
hour, hours h, hr, hrs
minute, minutes m, min, mins
second, seconds s, sec, secs
millisecond, milliseconds ms, msec, msecs, msecond, mseconds, millisec, millisecs, millisecon
microsecond, microseconds microsec, microsecs, microsecond, usecond, useconds, us, usec, usecs
timezone, timezone_hour, timezone_minute EXTRACT 函數僅針對含時區 (TIMESTAMPTZ) 的時間戳記所支援。

含秒、毫秒和微秒結果的差異

當不同日期函數指定秒、毫秒或微秒做為日期部分時,減去查詢結果的差異:

  • EXTRACT 函數會傳回整數僅做為指定日期部分,而忽略更高或更低層級的日期部分。若指定的日期部分為秒,則毫秒或微秒不會包含在結果中。若指定的日期部分為豪秒,則秒或微秒不會包含在內。若指定的日期部分為微秒,則秒或豪秒不會包含在內。

  • DATE_PART 函數會傳回時間戳記的完整秒部分,不論指定的日期部分為何,視需要傳回十進位值或整數。

例如,比較以下查詢的結果:

create table seconds(micro timestamp); insert into seconds values('2009-09-21 11:10:03.189717'); select extract(sec from micro) from seconds; date_part ----------- 3 select date_part(sec, micro) from seconds; pgdate_part ------------- 3.189717

CENTURY、EPOCH、DECADE 和 MIL 備註

CENTURY 或 CENTURIES

Amazon Redshift 會解釋 CENTURY 來以年 ###1 開始並以年 ###0 結束:

select extract (century from timestamp '2000-12-16 12:21:13'); date_part ----------- 20 select extract (century from timestamp '2001-12-16 12:21:13'); date_part ----------- 21
EPOCH

EPOCH 的 Amazon Redshift 實作相對於 1970-01-01 00:00:00.000000,與叢集所在的時區無關。您可能想要根據叢集所在的時區,彌補結果的時數差異。

下列範例示範以下方法:

  1. 建立名為 EVENT_EXAMPLE 且根據 EVENT 資料欄的資料表。此 CREATE AS 命令會使用 DATE_PART 函數來建立日期欄 (依預設,名為 PGDATE_PART),以儲存每個事件的 epoch 值。

  2. 從 PG_TABLE_DEF 選取 EVENT_EXAMPLE 的欄和資料類型。

  3. 從 EVENT_EXAMPLE 資料表選取 EVENTNAME、STARTTIME 和 PGDATE_PART,來檢視不同的日期和時間格式。

  4. 從 EVENT EXAMPLE 中按現狀選取 EVENTNAME 和 STARTTIME。使用 1 秒間隔將 PGDATE_PART 中的 epoch 值轉換為不含時區的時間戳記,並在名為 CONVERTED_TIMESTAMP 的欄位中傳回結果。

create table event_example as select eventname, starttime, date_part(epoch, starttime) from event; select "column", type from pg_table_def where tablename='event_example'; column | type ---------------+----------------------------- eventname | character varying(200) starttime | timestamp without time zone pgdate_part | double precision (3 rows)
select eventname, starttime, pgdate_part from event_example; eventname | starttime | pgdate_part ----------------------+---------------------+------------- Mamma Mia! | 2008-01-01 20:00:00 | 1199217600 Spring Awakening | 2008-01-01 15:00:00 | 1199199600 Nas | 2008-01-01 14:30:00 | 1199197800 Hannah Montana | 2008-01-01 19:30:00 | 1199215800 K.D. Lang | 2008-01-01 15:00:00 | 1199199600 Spamalot | 2008-01-02 20:00:00 | 1199304000 Macbeth | 2008-01-02 15:00:00 | 1199286000 The Cherry Orchard | 2008-01-02 14:30:00 | 1199284200 Macbeth | 2008-01-02 19:30:00 | 1199302200 Demi Lovato | 2008-01-02 19:30:00 | 1199302200 select eventname, starttime, timestamp with time zone 'epoch' + pgdate_part * interval '1 second' AS converted_timestamp from event_example; eventname | starttime | converted_timestamp ----------------------+---------------------+--------------------- Mamma Mia! | 2008-01-01 20:00:00 | 2008-01-01 20:00:00 Spring Awakening | 2008-01-01 15:00:00 | 2008-01-01 15:00:00 Nas | 2008-01-01 14:30:00 | 2008-01-01 14:30:00 Hannah Montana | 2008-01-01 19:30:00 | 2008-01-01 19:30:00 K.D. Lang | 2008-01-01 15:00:00 | 2008-01-01 15:00:00 Spamalot | 2008-01-02 20:00:00 | 2008-01-02 20:00:00 Macbeth | 2008-01-02 15:00:00 | 2008-01-02 15:00:00 The Cherry Orchard | 2008-01-02 14:30:00 | 2008-01-02 14:30:00 Macbeth | 2008-01-02 19:30:00 | 2008-01-02 19:30:00 Demi Lovato | 2008-01-02 19:30:00 | 2008-01-02 19:30:00 ...
DECADE 或 DECADES

Amazon Redshift 會根據一般日曆解釋 DECADE 或 DECADES DATEPART。例如,因為一般日曆是從年份 1 開始,第一個十年 (十年 1) 為 0001-01-01 至 0009-12-31,而第二個十年 (十年 2) 為 0010-01-01 到 0019-12-31。例如,十年 201 橫跨 2000-01-01 到 2009-12-31:

select extract(decade from timestamp '1999-02-16 20:38:40'); date_part ----------- 200 select extract(decade from timestamp '2000-02-16 20:38:40'); date_part ----------- 201 select extract(decade from timestamp '2010-02-16 20:38:40'); date_part ----------- 202
MIL 或 MILS

Amazon Redshift 會解釋 MIL 來以年 #001 的第一天開始並以年 #000 的最後一天結束:

select extract (mil from timestamp '2000-12-16 12:21:13'); date_part ----------- 2 select extract (mil from timestamp '2001-12-16 12:21:13'); date_part ----------- 3