跳到主要内容

EXTRACT

Introduced or updated: v1.2.723

检索日期、时间戳或间隔的指定部分。

另请参阅:DATE_PART

语法

-- 从日期或时间戳中提取
EXTRACT(
YEAR | QUARTER | MONTH | WEEK | DAY | HOUR | MINUTE | SECOND |
DOW | DOY | EPOCH | ISODOW | YEARWEEK | MILLENNIUM
FROM <date_or_timestamp>
)

-- 从间隔中提取
EXTRACT( YEAR | MONTH | WEEK | DAY | HOUR | MINUTE | SECOND | MICROSECOND | EPOCH FROM <interval> )
关键字描述
DOW星期几。 星期日 (0) 到星期六 (6)。
DOY一年中的第几天。 1 到 366。
EPOCH自 1970-01-01 00:00:00 以来的秒数。
ISODOWISO 星期几。 星期一 (1) 到星期日 (7)。
YEARWEEK遵循 ISO 8601 的年份和周数组合(例如,202415)。
MILLENNIUM日期的千年(1 表示 1-1000 年,2 表示 1001-2000 年,依此类推)。

返回类型

返回类型取决于要提取的字段:

  • 返回 Integer:当提取离散的日期或时间分量(例如,YEAR、MONTH、DAY、DOY、HOUR、MINUTE、SECOND)时,该函数返回一个 Integer。

    SELECT EXTRACT(DAY FROM now());  -- 返回 Integer
    SELECT EXTRACT(DOY FROM now()); -- 返回 Integer
  • 返回 Float:当提取 EPOCH(自 1970-01-01 00:00:00 UTC 以来的秒数)时,该函数返回一个 Float,因为它可能包含小数秒。

    SELECT EXTRACT(EPOCH FROM now());  -- 返回 Float

示例

此示例从当前时间戳中提取各种字段:

SELECT 
NOW(),
EXTRACT(DAY FROM NOW()),
EXTRACT(DOY FROM NOW()),
EXTRACT(EPOCH FROM NOW()),
EXTRACT(ISODOW FROM NOW()),
EXTRACT(YEARWEEK FROM NOW()),
EXTRACT(MILLENNIUM FROM NOW());

┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
now() │ EXTRACT(DAY FROM now()) │ EXTRACT(DOY FROM now()) │ EXTRACT(EPOCH FROM now()) │ EXTRACT(ISODOW FROM now()) │ EXTRACT(YEARWEEK FROM now()) │ EXTRACT(MILLENNIUM FROM now())
├────────────────────────────┼─────────────────────────┼─────────────────────────┼───────────────────────────┼────────────────────────────┼──────────────────────────────┼────────────────────────────────┤
2025-04-16 18:04:22.773888161061744826662.77388832025163
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

此示例从间隔中提取天数:

SELECT EXTRACT(DAY FROM '1 day 2 hours 3 minutes 4 seconds'::INTERVAL);

┌─────────────────────────────────────────────────────────────────┐
│ EXTRACT(DAY FROM '1 day 2 hours 3 minutes 4 seconds'::INTERVAL)
├─────────────────────────────────────────────────────────────────┤
1
└─────────────────────────────────────────────────────────────────┘
开始使用 Databend Cloud
低成本
快速分析
多种数据源
弹性扩展
注册