EXTRACT 函数 - Amazon Redshift

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 示例

以下示例确定支付价格为 10000 美元或更高的销售周数。此示例使用 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

以下示例从文本时间戳值返回分钟值。

select extract(minute from timestamp '2009-09-09 12:08:43'); date_part ----------- 8

以下示例从文本时间戳值返回毫秒值。

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 小时(即 1 天 12 小时)的 INTERVAL DAY TO SECOND 中提取 1 的日部分。

select EXTRACT('days' from INTERVAL '36 hours' DAY TO SECOND) date_part ------------------ 1

以下示例从定义 15 个月(即 1 年 3 个月)的 YEAR TO MONTH 中提取 3 的月份部分。

select EXTRACT('month' from INTERVAL '15 months' YEAR TO MONTH) date_part ------------------ 3

以下示例从 30 个月(即 2 年 6 个月)中提取 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