将 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 年的任何一周都不匹配。
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 年的任何一周都不匹配。