在legacy_sql中,UTC_USEC_TO_WEEK
具有day_of_week
参数,用于指定计算周的星期几。但是在标准SQL中,TIMESTAMP_TRUNC(<timestamp>, WEEK)
没有这个参数,它默认为星期日。
有没有干净的解决方法,除了:TIMESTAMP_ADD(TIMESTAMP_TRUNC(<timestamp>, WEEK), INTERVAL 1 DAY)
?
现在可以使用,并在发行说明中进行了说明:
INTERSECT DISTINCT
和EXCEPT DISTINCT
现在是标准SQL中支持的集合运算符。
FARM_FINGERPRINT
现在是旧版SQL中受支持的功能。
WEEK(<WEEKDAY>)
现在是EXRACT
函数的有效日期部分。
现在每个用户有300个并发API请求的配额。
Cloud IAM custom roles
现在可用于BigQuery。
现在,在分区表上使用通配符表查询数据时,支持_PARTITIONTIME
伪列。
我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;