BigQuery 从日期字段中提取周作为日期范围
BigQuery extract week as date range from date field
我想从 bigquery 的 DATETIME
字段中提取星期作为日期范围。
从 these docs 我可以将周提取为这样的周数
EXTRACT(WEEK FROM date)
,或者像这样获取第一天作为日期 DATE_TRUNC(DATE(date), WEEK)
但是如果我想得到一个日期范围怎么办,例如,如果日期字段的值为 2021-12-23 04:30:00
并且说星期日是一周中的第一天,我想得到这个结果 2021-12-19 - 2021-12-25
或类似的东西。可能吗?
根据您想要的输出、单独的列或单个字符串,您可以尝试以下操作:
with sample_data as (
SELECT date FROM UNNEST(generate_timestamp_array('2021-12-01 00:00:00', '2022-02-01 00:00:00', INTERVAL 1 DAY)) as date
)
select
date
, DATE_TRUNC(DATE(date), WEEK) week_start
, DATE_TRUNC(DATE(date), WEEK) +6 week_end
, LAST_DAY(DATE(date), WEEK) as alt_week_end
, concat(DATE_TRUNC(DATE(date), WEEK)," - ", DATE_TRUNC(DATE(date), WEEK) +6) week_range
from sample_data
考虑以下方法
select *,
date_trunc(date(date), week) week_start,
last_day(date(date), week) week_end
from your_table
输出类似
我想从 bigquery 的 DATETIME
字段中提取星期作为日期范围。
从 these docs 我可以将周提取为这样的周数
EXTRACT(WEEK FROM date)
,或者像这样获取第一天作为日期 DATE_TRUNC(DATE(date), WEEK)
但是如果我想得到一个日期范围怎么办,例如,如果日期字段的值为 2021-12-23 04:30:00
并且说星期日是一周中的第一天,我想得到这个结果 2021-12-19 - 2021-12-25
或类似的东西。可能吗?
根据您想要的输出、单独的列或单个字符串,您可以尝试以下操作:
with sample_data as (
SELECT date FROM UNNEST(generate_timestamp_array('2021-12-01 00:00:00', '2022-02-01 00:00:00', INTERVAL 1 DAY)) as date
)
select
date
, DATE_TRUNC(DATE(date), WEEK) week_start
, DATE_TRUNC(DATE(date), WEEK) +6 week_end
, LAST_DAY(DATE(date), WEEK) as alt_week_end
, concat(DATE_TRUNC(DATE(date), WEEK)," - ", DATE_TRUNC(DATE(date), WEEK) +6) week_range
from sample_data
考虑以下方法
select *,
date_trunc(date(date), week) week_start,
last_day(date(date), week) week_end
from your_table
输出类似