如何使用set为上一年和当前一年指定4个不同的开始日期和结束日期,所有这些日期都指定为每月的第一天?

2nbm6dog  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(397)

我尝试在snowsql中设置变量,分别指定当前年份和前几年的每个开始月和结束月的第一个。我希望代码能够滚动到新的一个月随着时间的推移。例如,因为是2020年6月,所以我们将有m2_start=2020-06-01和m2_end=2020-07-01。m1_开始=2019-06-01和m1_结束2019-07-01。这是我目前所拥有的,但由于我不知道如何在本月的第一天具体说明,我想要的东西并不安静:
设置m1\u start=(从dimdate d中选择distinct dateadd(year,-1,current\u date),其中day(d.“date”)=1);
设置m1\u end=(从dimdate d中选择distinct dateadd(month,-11,current\u date),其中day(d.“date”)=1);
设置m2_start=(从dimdate d中选择d.“date”,其中日(d.“date”)=1,月(d.“date”)=month(current_date),年(d.“date”)=year(current_date));
设置m2\u end=(从dimdate d中选择distinct dateadd(month,1,current\u date),其中day(d.“date”)=1);
设置测试='2020-06-01';

ruyhziif

ruyhziif1#

可以使用 DATE_ADD(…) , DATE_TRUNC(…) 以及 ADD_MONTHS(…) 特定于目的的日期/时间函数。
我不知道如何在月初指定:
这个 DATE_TRUNC(…) 函数允许您将任何日期切碎到其任何部分的开头。当你和 month 部分,它将产生一个等于月初的日期。
一个简单的例子:

SET _current_date = (SELECT CURRENT_DATE);
SET _last_year_date = (SELECT DATEADD(year, -1, $_current_date));

SET m2_start = (SELECT DATE_TRUNC(month, $_current_date));
SET m2_end = (SELECT ADD_MONTHS($m2_start, 1));

SET m1_start = (SELECT DATE_TRUNC(month, $_last_year_date));
SET m1_end = (SELECT ADD_MONTHS($m1_start, 1));

-- Alternatively, you can derive m1_* values by subtracting a year from m2_*
-- values, but it felt too intermingled
-- SET m1_start = (SELECT DATE_ADD(year, -1, $m2_start));
-- SET m1_end = (SELECT DATE_ADD(year, -1, $m2_end));

在上执行时的输出示例 2020-06-24 :

> SELECT $_current_date, $_last_year_date, $m1_start, $m1_end, $m2_start, $m2_end;

+----------------+------------------+------------+------------+------------+------------+
| $_CURRENT_DATE | $_LAST_YEAR_DATE | $M1_START  | $M1_END    | $M2_START  | $M2_END    |
|----------------+------------------+------------+------------+------------+------------|
| 2020-06-23     | 2019-06-23       | 2019-06-01 | 2019-07-01 | 2020-06-01 | 2020-07-01 |
+----------------+------------------+------------+------------+------------+------------+

相关问题