Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

日期或时间戳函数的日期部分

下表列出了已作为以下函数的参数接受的日期部分和时间部分名称和缩写:

  • DATEADD

  • DATEDIFF

  • DATE_PART

  • DATE_TRUNC

  • EXTRACT

日期部分或时间部分 缩写
千年 mil、mils
世纪 c、cent、cents
十年 dec、decs
纪元 epoch(受 DATE_PARTEXTRACT支持)
y、yr、yrs
季度 qtr、qtrs
mon、mons

w

DATE_TRUNC一起使用时将返回最近的一个星期一的日期。

一周中的日

dayofweek、dow、dw、weekday(受 DATE_PART EXTRACT 函数支持)

返回 0–6 的整数(星期日是第一个数)。

注意

DOW 日期部分的运行方式与用于日期时间格式字符串的一周中日 (D) 的日期部分不同。D 是基于 1–7 的整数,其中星期日是 1。有关更多信息,请参阅 日期时间格式字符串

一年中的日 dayofyear、doy、dy、yearday(受 DATE_PARTEXTRACT支持)
d
小时 h、hr、hrs
分钟 m、min、mins
s、sec、secs
毫秒 ms、msec、msecs、msecond、mseconds、millisec、millisecs、millisecon
微秒 microsec、microsecs、microsecond、usecond、useconds、us、usec、usecs
时区,timezone_hour,timezone_minute 仅受 DATE_TRUNC 函数和用于有时区时间戳 (TIMESTAMPTZ) 的EXTRACT 支持。

秒、毫秒和微秒导致的结果变体

当不同的日期函数指定了秒、毫秒或微秒作为日期部分时,查询结果可能出现细微差异:

  • EXTRACT 函数仅为指定的日期格式返回整数,而忽略更高和更低位的日期部分。如果指定的日期部分为秒,则毫秒和微秒不会包含在结果中。如果指定的日期部分为毫秒,则秒和微秒不会包含在内。如果指定的日期部分为微秒,则秒和毫秒不会包含在内。

  • DATE_PART 函数返回时间戳的完整秒部分(无论指定日期部分如何),并根据需要返回小数值或整数。

例如,比较以下查询的结果:

Copy
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 (1 row) select date_part(sec, micro) from seconds; pgdate_part ------------- 3.189717 (1 row)

CENTURY、EPOCH、DECADE 和 MIL 说明

CENTURY 或 CENTURIES

Amazon Redshift 将 CENTURY 解释为开始于年 ###1 并结束于年 ###0

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

Amazon Redshift 的 EPOCH 实施与独立于服务器所在的时区的 1970-01-01 00:00:00.000000 相关。您可能需要用依赖于服务器所在的时区的小时数之差补偿结果。

以下示例演示了以下操作:

  1. 基于 EVENT 表创建名为 EVENT_EXAMPLE 的表。此 CREATE AS 命令使用 DATE_PART 函数创建日期列(默认情况下称为 PGDATE_PART)以存储每个事件的纪元值。

  2. 从 PG_TABLE_DEF 中选择 EVENT_EXAMPLE 的列和数据类型。

  3. 从 EVENT_EXAMPLE 表中选择 EVENTNAME、STARTTIME 和 PGDATE_PART 以查看不同的日期和时间格式。

  4. 从 EVENT EXAMPLE 中选择 EVENTNAME 和 STARTTIME 并保持原样。使用 1 秒的间隔将 PGDATE_PART 中的纪元值转换为没有时区的时间戳,并在名为 CONVERTED_TIMESTAMP 的列中返回结果。

Copy
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)
Copy
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:

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

Amazon Redshift 将 MIL 解释为开始于年 #001 的第一天并结束于年 #000 的最后一天:

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