SQL 方言通

首页 / 日期

DAYOFWEEK 星期几

DAYOFWEEK 返回日期是星期几。MaxCompute、StarRocks、Doris、Spark 和 Flink 都以周日为 1、周六为 7;Hologres 的 EXTRACT(DOW ...) 以周日为 0,Hive 要用 EXTRACT(dayofweek FROM ...)。需要周一为 1 时,各引擎的写法都要额外换算。

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

各引擎写法

引擎支持写法说明依据
MaxCompute支持DAYOFWEEK(date)返回 1~7,1 是周日,7 是周六。WEEKDAY(date) 则以周一为 0、周日为 6。官方文档
Hologres需改写EXTRACT(DOW FROM ts) + 1DOW 以周日为 0,所以要加 1 才和其他引擎一致。ISODOW 以周一为 1、周日为 7。官方文档
StarRocks支持dayofweek(date)周日为 1,周一为 2,周六为 7。官方文档
Doris支持DAYOFWEEK(date)别名 DOW。周日为 1,周六为 7,与 MySQL 的 dayofweek 一致。官方文档
Hive需改写extract(dayofweek FROM ts)内置函数文档中没有 dayofweek 函数,Hive 2.2.0 起可以用 extract 取 dayofweek,文档示例中 2016-10-20(周四)返回 5,即周日为 1。官方文档
Spark SQL支持dayofweek(date)Spark 2.3.0 起提供,周日为 1,周六为 7。weekday(date) 则以周一为 0、周日为 6。官方文档
Flink SQL支持DAYOFWEEK(date)返回 1~7,等价于 EXTRACT(DOW FROM date)。文档示例中 1994-09-27(周二)返回 3,即周日为 1。官方文档

迁移注意事项

示例

筛选周末的订单

MaxCompute
SELECT * FROM orders WHERE DAYOFWEEK(order_date) IN (1, 7);
Hologres
SELECT * FROM orders WHERE EXTRACT(DOW FROM order_date) IN (0, 6);
StarRocks
SELECT * FROM orders WHERE dayofweek(order_date) IN (1, 7);
Doris
SELECT * FROM orders WHERE DAYOFWEEK(order_date) IN (1, 7);
Hive
SELECT * FROM orders WHERE extract(dayofweek FROM order_date) IN (1, 7);
Spark SQL
SELECT * FROM orders WHERE dayofweek(order_date) IN (1, 7);
Flink SQL
SELECT * FROM orders WHERE DAYOFWEEK(order_date) IN (1, 7);

同类函数

最后核对日期: