SQL 方言通

首页 / 日期

WEEKOFYEAR 一年中的第几周

WEEKOFYEAR 返回日期在一年中的第几周。多数引擎以周一为一周的开始,并按“第一周至少有 4 天”的规则计算,所以 1 月初可能返回 52 或 53。Hologres 用 EXTRACT(WEEK FROM ...),返回 DOUBLE PRECISION;Flink 用 WEEK。

各引擎写法 · 迁移注意事项 · 示例

各引擎写法

引擎支持写法说明依据
MaxCompute支持WEEKOFYEAR(date[, date_part])默认周一为一周的第一天,1 月 1 日所在周有 4 天及以上属于当年时算作第一周。date_part 可以传 week(sunday) 等指定一周的起始日,或传 isoweek。官方文档
Hologres需改写EXTRACT(WEEK FROM ts)也可以用 week_iso(ts),文档说明语义与 EXTRACT(WEEK FROM ts) 相同、性能更好。返回 DOUBLE PRECISION。官方文档
StarRocks支持WEEKOFYEAR(date)返回 INT。文档没有说明周的划分规则;需要 ISO 周时可以用 week_iso。官方文档
Doris支持WEEKOFYEAR(date)周一为一周的开始,一周中有 4 天及以上在当年时算作当年的周,返回 1~53,与 MySQL 的 weekofyear 一致。官方文档
Hive支持weekofyear(string date)返回 INT,可以传入日期或时间戳字符串。官方文档
Spark SQL支持weekofyear(date)周一为一周的开始,第一周是第一个超过 3 天的周。官方文档
Flink SQL别名WEEK(date)返回 1~53,等价于 EXTRACT(WEEK FROM date)。官方文档

迁移注意事项

示例

按周汇总订单量

MaxCompute
SELECT WEEKOFYEAR(order_date) AS wk, COUNT(*) FROM orders GROUP BY WEEKOFYEAR(order_date);
Hologres
SELECT CAST(EXTRACT(WEEK FROM order_date) AS INT) AS wk, COUNT(*) FROM orders GROUP BY 1;
StarRocks
SELECT WEEKOFYEAR(order_date) AS wk, COUNT(*) FROM orders GROUP BY WEEKOFYEAR(order_date);
Doris
SELECT WEEKOFYEAR(order_date) AS wk, COUNT(*) FROM orders GROUP BY WEEKOFYEAR(order_date);
Hive
SELECT weekofyear(order_date) AS wk, COUNT(*) FROM orders GROUP BY weekofyear(order_date);
Spark SQL
SELECT weekofyear(order_date) AS wk, COUNT(*) FROM orders GROUP BY weekofyear(order_date);
Flink SQL
SELECT WEEK(order_date) AS wk, COUNT(*) FROM orders GROUP BY WEEK(order_date);

同类函数

最后核对日期: