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

时间:2017-08-14 06:22:20

标签: 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)

2 个答案:

答案 0 :(得分:6)

filed a feature request支持指定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;

编辑:现在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;

答案 1 :(得分:2)

现在可以使用,并在发行说明中记录:

INTERSECT DISTINCTEXCEPT DISTINCT现在支持标准SQL中的集合运算符。

FARM_FINGERPRINT现在是旧版SQL中受支持的功能。

WEEK(<WEEKDAY>)现在是EXRACT函数的有效日期部分。

现在每个用户有300个并发API请求的配额。

Cloud IAM custom roles现在可用于BigQuery。

现在,在分区表上使用通配符表查询数据时,支持_PARTITIONTIME伪列。

Google Cloud Platform release document

的更多信息