Sql 更改一周的开始日期黑斑羚

Sql 更改一周的开始日期黑斑羚,sql,impala,Sql,Impala,我试图改变一周的开始日期,但无法实现 现在是星期一到星期天,应该是星期天到星期六 我尝试在以下数据集发票日期和发票周 SELECT invoice_date, weekofyear(invoice_date) as invoice_week, datesub(invoice_date,1), weekofyear(datesub(invoice_date,1)) as invoice_week1 from table 我认为不应该用1减

我试图改变一周的开始日期,但无法实现 现在是星期一到星期天,应该是星期天到星期六 我尝试在以下数据集
发票日期
发票周

 SELECT invoice_date,
        weekofyear(invoice_date) as invoice_week,
        datesub(invoice_date,1),
        weekofyear(datesub(invoice_date,1)) as invoice_week1 
   from table

我认为不应该用1减去日期,而应该用1加上日期:

select 
        invoice_date,
        weekofyear(invoice_date) as invoice_week,
        adddate(invoice_date,1),
        weekofyear(adddate(invoice_date,1)) as invoice_week1 
from(
        select cast('2018-01-07 16:00:00' as timestamp) invoice_date
)stg

找到了一个有效的解决方案。给定一个日期,如果您想要周日-周六周,而不是默认的周一-周日周,那么这里是一周开始和结束的日期

SET var:date=2019-01-06;
select  to_date(IF( dayofweek(cast('${var:date}' as timestamp)) = 1, cast('${var:date}' as timestamp), trunc(cast('${var:date}' as timestamp), 'd') - interval 1 day)) as startOfWeek, to_date(IF( dayofweek(cast('${var:date}' as timestamp)) = 1, (trunc(cast('${var:date}' as timestamp) + interval 1 day, 'd') + interval 5 day), (trunc(cast('${var:date}' as timestamp), 'd') + interval 5 day) )) as endOfWeek;
+-------------+------------+
| startofweek | endofweek  |
+-------------+------------+
| 2019-01-06  | 2019-01-12 |
+-------------+------------+