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