跳到主要内容

extract:提取日期部分

速查结论

extract(field FROM source) 是 Spark SQL 中用于从日期/时间戳或间隔中提取指定字段部分的函数。

语法

extract(field FROM source)

参数说明

  • field - 选择要从 source 提取的部分

对于日期和时间戳,field 支持的字符串值(不区分大小写)有:

  • "YEAR", ("Y", "YEARS", "YR", "YRS") - 年份字段
  • "YEAROFWEEK" - ISO 8601 周编号年份,datetime 所在的年份。例如,2005-01-02 是2004年的第53周,因此结果是2004
  • "QUARTER", ("QTR") - datetime 所在的季度(1 - 4)
  • "MONTH", ("MON", "MONS", "MONTHS") - 月份字段(1 - 12)
  • "WEEK", ("W", "WEEKS") - ISO 8601 周编号。一周从星期一开始,第1周是一年中第一个有超过3天的一周。在 ISO 周编号系统中,1月初的日期可能是上一年的第52或53周,而12月底的日期可能是下一年的第1周。例如,2005-01-02 是2004年的第53周,而2012-12-31 是2013年的第一周
  • "DAY", ("D", "DAYS") - 月份中的天数字段(1 - 31)
  • "DAYOFWEEK",("DOW") - datetime 作为一周中的星期几,星期日(1) 到星期六(7)
  • "DAYOFWEEK_ISO",("DOW_ISO") - 根据 ISO 8601,datetime 作为一周中的星期几,星期一(1) 到星期日(7)
  • "DOY" - 一年中的天数(1 - 365/366)
  • "HOUR", ("H", "HOURS", "HR", "HRS") - 小时字段(0 - 23)
  • "MINUTE", ("M", "MIN", "MINS", "MINUTES") - 分钟字段(0 - 59)
  • "SECOND", ("S", "SEC", "SECONDS", "SECS") - 秒字段,包括小数部分
  • 对于间隔(由月、日、微秒组成),field 支持的字符串值(不区分大小写)有:
  • "YEAR", ("Y", "YEARS", "YR", "YRS") - 总月数除以 12 的结果
  • "MONTH", ("MON", "MONS", "MONTHS") - 总月数除以 12 的余数
  • "DAY", ("D", "DAYS") - 间隔的天数部分
  • "HOUR", ("H", "HOURS", "HR", "HRS") - 微秒中包含的小时数
  • "MINUTE", ("M", "MIN", "MINS", "MINUTES") - 从微秒中减去小时后剩余的分钟数
  • "SECOND", ("S", "SEC", "SECONDS", "SECS") - 从微秒中减去小时和分钟后剩余的带小数的秒数
  • source - 要从中提取字段的日期/时间戳或间隔列。

示例

> SELECT extract(YEAR FROM TIMESTAMP '2019-08-12 01:00:00.123456');
2019
> SELECT extract(week FROM timestamp'2019-08-12 01:00:00.123456');
33
> SELECT extract(doy FROM DATE'2019-08-12');
224
> SELECT extract(SECONDS FROM timestamp'2019-10-01 00:00:01.000001');
1.000001
> SELECT extract(days FROM interval 5 days 3 hours 7 minutes);
5
> SELECT extract(seconds FROM interval 5 hours 30 seconds 1 milliseconds 1 microseconds);
30.001001
> SELECT extract(MONTH FROM INTERVAL '2021-11' YEAR TO MONTH);
11
> SELECT extract(MINUTE FROM INTERVAL '123 23:55:59.002001' DAY TO SECOND);
55

常见报错与避坑指南

  • 对于日期和时间戳类型,仅支持上述列出的 field 值;传入不支持的 field 会导致 AnalysisException
  • 对于间隔类型,仅支持 YEARMONTHDAYHOURMINUTESECOND 六个 field 值。
  • extract 函数等同于 date_part(field, source),两者可以互换使用。

Since: 3.0.0

📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

备注「数据仓库技术」加入社群,每日一道大厂SQL真题

交流微信二维码

你可能还想看