本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
日期或時間戳記函數的日期部分
下表識別日期部分和時間部分名稱和縮寫,系統接受它們做為以下函數的引數:
-
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,與叢集所在的時區無關。您可能想要根據叢集所在的時區,彌補結果的時數差異。
下列範例示範以下方法:
-
建立名為 EVENT_EXAMPLE 且根據 EVENT 資料欄的資料表。此 CREATE AS 命令會使用 DATE_PART 函數來建立日期欄 (依預設,名為 PGDATE_PART),以儲存每個事件的 epoch 值。
-
從 PG_TABLE_DEF 選取 EVENT_EXAMPLE 的欄和資料類型。
-
從 EVENT_EXAMPLE 資料表選取 EVENTNAME、STARTTIME 和 PGDATE_PART,來檢視不同的日期和時間格式。
-
從 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