You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery标准SQL如何提取星期几(数字形式)?

在BigQuery标准SQL中提取星期几的数字

嘿,这个问题确实挺常见的——BigQuery标准SQL确实没有直接对应Legacy SQL里DAYOFWEEK的函数,但有几个简单好用的替代方案,完全能满足需求:

方法1:使用EXTRACT(WEEKDAY ...)(最直接)

标准SQL里的EXTRACT(WEEKDAY FROM date_expression)可以返回星期几的数字,但注意它的基准是0代表周日,6代表周六。如果你的需求和Legacy SQL的DAYOFWEEK完全一致(1=周日,2=周一…7=周六),只需要给结果加1就行:

SELECT
  your_date_column,
  -- 返回0(周日)到6(周六)
  EXTRACT(WEEKDAY FROM your_date_column) AS weekday_0_based,
  -- 和Legacy SQL DAYOFWEEK结果一致:1(周日)到7(周六)
  EXTRACT(WEEKDAY FROM your_date_column) + 1 AS weekday_1_based
FROM your_dataset.your_table

方法2:使用FORMAT_DATE('%w', ...)

FORMAT_DATE('%w', date_expression)会返回字符串类型的数字(同样0=周日,6=周六),如果需要数字类型,转成INT64再加1就能匹配Legacy SQL的结果:

SELECT
  your_date_column,
  -- 返回字符串"0"到"6"
  FORMAT_DATE('%w', your_date_column) AS weekday_str,
  -- 转成数字后和Legacy SQL DAYOFWEEK对齐
  CAST(FORMAT_DATE('%w', your_date_column) AS INT64) + 1 AS weekday_num
FROM your_dataset.your_table

额外补充:ISO标准的星期编号(周一为第一天)

如果你的业务逻辑里周一才是一周的第一天,可以用EXTRACT(ISOWEEKDAY FROM date_expression),它返回1(周一)到7(周日),完全符合ISO标准:

SELECT
  your_date_column,
  -- 1=周一,7=周日
  EXTRACT(ISOWEEKDAY FROM your_date_column) AS iso_weekday
FROM your_dataset.your_table

内容的提问来源于stack exchange,提问作者Sandesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:06:43