我需要将2016 年最后一周的所有日期按日期转换为YYYYWW
格式。
#standardSQL
WITH Input AS (
SELECT date
FROM UNNEST([
DATE '2016-12-26',
DATE '2016-12-27',
DATE '2016-12-28',
DATE '2016-12-29',
DATE '2016-12-30',
DATE '2016-12-31',
DATE '2017-01-01']) AS date
)
SELECT
date,
CAST(FORMAT_DATE('%Y%V', CAST(date AS DATE)) AS STRING) AS YearWeek,
CAST(FORMAT_DATE('%Y', CAST(date AS DATE)) AS STRING) AS Year,
CAST(FORMAT_DATE('%V', CAST(date AS DATE)) AS STRING) AS
FROM Input
ORDER BY date
一切OK,直到它达到2017-01-01
:
Row date YearWeek Year Week
1 2016-12-26 201652 2016 52
2 2016-12-27 201652 2016 52
3 2016-12-28 201652 2016 52
4 2016-12-29 201652 2016 52
5 2016-12-30 201652 2016 52
6 2016-12-31 201652 2016 52
7 2017-01-01 201752 2017 52
' 201752
' 应该是 ' 201652
'。
为历史日期自动化的最佳方法?
像这样的东西:
IF (REGEXP_EXTRACT(date,r'\d{4}-\d{2}-(\d{2})') = CAST('01' AS STRING)
AND Week = CAST('52' AS STRING), Year-1, Year)