将 1 添加到 Google BigQuery Standard SQL 中字符串的时间列

Adding 1 to time column of strings in Google BigQuery Standard SQL

Column 是 Year+FiscalWeek 时间的字符串,例如“201916”。

我使用 REPLACE(COLUMN, "2019", "") 将列保留在周数,列现在 = "16"

但现在我这周加入了另一个table,它被一个星期抵消了。 我现在想在列下方的每个条目中添加 1,例如 16=17、18=19。

我建议转成数字。如果你只处理一年,那么:

select cast(column as int64)

然后您可以与前一周进行比较。

对于跨年,你有问题。有些年份有 52 周,有些年份有 53 周。因此,您不知道 201901 之前的一周是 201853 还是 201852。日历 table 或 ISO 定义的使用可能会影响此处。

最简单的方法是将财政周转换为 INT64,然后将 2018 FW 减去 1。此查询应该适合您:

SELECT * from table2019 a
join table2018 b on SUBSTR(a.week2019,5) = SUBSTR(CAST(CAST(b.week2018 as int64) - 1 
as STRING),5)

有一些虚拟数据:

#standardSQL
with table2019 as (
 SELECT CAST(week as string) as week2019
 FROM UNNEST(generate_array(201901,201915)) as week
),
table2018 as (
 SELECT CAST(week as string) as week2018
 FROM UNNEST(generate_array(201801,201815)) as week
)
SELECT * from table2019 a
join table2018 b on SUBSTR(a.week2019,5) = SUBSTR(CAST(CAST(b.week2018 as int64) - 1 as STRING),5)

它returns:

Row week2019    week2018     
1   201901  201802   
2   201902  201803   
3   201903  201804   
4   201904  201805   
5   201905  201806   
6   201906  201807   
7   201907  201808   
8   201908  201809   
9   201909  201810   
10  201910  201811   
11  201911  201812   
12  201912  201813   
13  201913  201814   
14  201914  201815   

它将 2019 年的第 1 周与 2018 年的第 2 周连接起来。请注意,如果 2019 年的最后一周的周数相同(或者 2018 年的周数少于 2019 年),则它们可能与 2018 年的任何一周都不匹配。