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
相关产品推荐
相关产品推荐

