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

问题描述 投票:0回答:2

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

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

google-bigquery
2个回答
2
投票

现在可以使用,并在发行说明中进行了说明:

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

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

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

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

Cloud IAM custom roles现在可用于BigQuery。

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

更多信息在Google Cloud Platform release document


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;
© www.soinside.com 2019 - 2024. All rights reserved.