我在date列上有一个配置单元表分区。现在,我想获取它每天运行的最后三个月。
show partitions test;
OK
test_month=2019-05-01
test_month=2019-06-01
test_month=2019-07-01
test_month=2019-08-01
test_month=2019-09-01
datediff(test_month, to_date(CURRENT_DATE)) >= 90;
test_month <= DATEADD(MONTH, 90, GETDATE());
预期结果: 获取过去3个月分区中的所有日期;
所需的输出:
select DISTINCT(test_month) from test where test_month <code>
应该给出:
test_month=2019-07-01
test_month=2019-08-01
test_month=2019-09-01
答案 0 :(得分:1)
不确定您的配置单元版本是什么,但是由于1.1.0
支持add_months
:
select current_timestamp();
+--------------------------+--+
| _c0 |
+--------------------------+--+
| 2019-09-03 17:10:30.396 |
+--------------------------+--+
由于您想要data >= '2019-07-01'
,因此需要对{tr1}进行截断。
以-2
作为参考,如果它的自动过程和您想要相同的日期,则可以按原样使用,也可以是任何current_timestamp()
数据类型值。
如下所示:
date
仅供参考:
trunc(时间戳日期,STRING个单位)
剥离字段,并可以选择舍入TIMESTAMP值。那个单位 参数值区分大小写。该参数字符串可以是以下之一: SYYYY,YYYY,YEAR,SYEAR,YYY,YY,Y:年份。问:季度。星期一,星期一 MM,RM:月。 WW,W:与星期几的第一天相同 月。 DDD,DD,J:天。 DAY,DY,D:星期几。 (不 必须是当前日期。)HH,HH12,HH24:小时。 TIMESTAMP值 截断到小时总是以24小时表示法表示,即使 HH12参数字符串。 MI:分钟。
add_months(时间戳日期,BIGINT | INT个月)
返回指定的日期和时间以及一些月份。
确切-3个月,而不是每月开始
select DISTINCT(test_month) from test
where test_month >= add_months(trunc(current_timestamp(), 'MONTH'), -2)
select add_months(trunc(current_timestamp(), 'MONTH'), -2) ;
+-------------+--+
| _c0 |
+-------------+--+
| 2019-07-01 |
+-------------+--+
开始日期为-3个月的日期:
select add_months(current_timestamp(), -3) ;
+-------------+--+
| _c0 |
+-------------+--+
| 2019-06-03 |
+-------------+--+