Google Bigquery Legacy SQL如何将周起始设置为周一?
解决Legacy SQL中UTC_USEC_TO_WEEK()以周一为周起始的问题
我完全理解你的困扰——没法切换到标准SQL,又需要调整UTC_USEC_TO_WEEK()的周起始规则,让指定日期返回1而非2。其实通过简单的时间偏移处理就能实现,具体方法如下:
核心思路
UTC_USEC_TO_WEEK()默认以周日作为每周的第一天。要让周一成为起始,我们可以先把目标时间戳减去一天的微秒数(86400000000),再传入函数。这样相当于把所有日期往前推一天,原来的周一就会被函数识别为新一周的“周日”,从而让周数计算逻辑等价于以周一为起始。
示例代码
假设你要查询的时间戳是target_timestamp,原来的写法是:
SELECT UTC_USEC_TO_WEEK(target_timestamp) AS week_number
现在修改为:
SELECT UTC_USEC_TO_WEEK(target_timestamp - 86400000000) AS week_number
验证逻辑
举个实际例子:
- 如果
target_timestamp是某个周一的0点(微秒格式),直接用原函数会把它算进周日起始的第二周(返回2); - 减去一天后,时间变成前一周的周日0点,此时函数会返回1,正好符合你想要的结果。
- 对于周日的时间,减去一天后变成周六,会被归为上一周,这样周一到周日就会被划分为同一周,完美匹配周一作为周起始的需求。
内容的提问来源于stack exchange,提问作者AK91
相关产品推荐
相关产品推荐

