在legacy_sql中,UTC_USEC_TO_WEEK具有day_of_week参数以指定计算周的星期几.但是在标准SQL中,TIMESTAMP_TRUNC(<timestamp>, WEEK)没有这个参数,它默认为星期日.
有没有干净的解决方法,除了:TIMESTAMP_ADD(TIMESTAMP_TRUNC(<timestamp>, WEEK), INTERVAL 1 DAY)?
我提交了一个功能请求,以支持为DATE_TRUNC/ TIMESTAMP_TRUNC和其他日期/时间戳功能指定WEEK边界的开始日期,因此请将问题标记为表达兴趣并接收更新.在此期间,您可以将此逻辑表达为临时函数:
#standardSQL
CREATE TEMP FUNCTION TimestampTruncToMonday(t TIMESTAMP) AS (
TIMESTAMP_ADD(
TIMESTAMP_TRUNC(TIMESTAMP_SUB(t, INTERVAL 1 DAY), WEEK),
INTERVAL 1 DAY
)
);
SELECT
t,
TimestampTruncToMonday(t) AS monday
FROM UNNEST([
TIMESTAMP '2017-08-17',
TIMESTAMP '2017-06-25',
TIMESTAMP '2016-01-01'
]) AS t;
Run Code Online (Sandbox Code Playgroud)
编辑:现在BigQuery支持WEEK(<WEEKDAY>),这更简单:
SELECT
t,
TIMESTAMP_TRUNC(t, WEEK(MONDAY)) AS monday
FROM UNNEST([
TIMESTAMP '2017-08-17',
TIMESTAMP '2017-06-25',
TIMESTAMP '2016-01-01'
]) AS t;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2930 次 |
| 最近记录: |