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。 - 对于间隔类型,仅支持
YEAR、MONTH、DAY、HOUR、MINUTE、SECOND六个 field 值。 extract函数等同于date_part(field, source),两者可以互换使用。
Since: 3.0.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

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