获取标准sql中星期一开始的星期日期

han*_*s-t 0 google-bigquery

在legacy_sql中,UTC_USEC_TO_WEEK具有day_of_week参数以指定计算周的星期几.但是在标准SQL中,TIMESTAMP_TRUNC(<timestamp>, WEEK)没有这个参数,它默认为星期日.

有没有干净的解决方法,除了:TIMESTAMP_ADD(TIMESTAMP_TRUNC(<timestamp>, WEEK), INTERVAL 1 DAY)

Ell*_*ard 6

提交了一个功能请求,以支持为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)