我想返回上个月 16 号到今天之间的值,但需要上个月 16 号是动态的,这样我就不必每次都更改月份
这就是现在的代码:
哪里 “2023-01-16”和“2023-02-15”之间的日期
我需要它更像这样:
哪里 'YYYY-MM-16' 和现在之间的日期()
这是获得上个月第 16 日的一个选项(今天是 2023 年 3 月 14 日):
SQL> select trunc(add_months(sysdate, -1), 'mm') + 15 start_value
2 from dual;
START_VALU
----------
2023-02-16
SQL>
因此,您的查询将有
where date_column between trunc(add_months(sysdate, -1), 'mm') + 15 and sysdate
修改请求后,然后使用
case
表达式检查今天的日期是否在该月的16号之前;如果是,减去 1 个月 - 否则,不要。在实际查询中,您将使用 sysdate
而不是 today
:
样品日期:
SQL> with temp (today) as
2 (select date '2023-03-14' from dual union all
3 select date '2023-03-20' from dual
4 )
查询(再一次:你会使用
sysdate
而不是 today
):
5 select today,
6 trunc(add_months(today,
7 case when to_number(to_char(today, 'dd')) < 16 then -1
8 else 0
9 end), 'mm') + 15
10 as start_value
11 from temp;
TODAY START_VALUE
---------- -----------
2023-03-14 2023-02-16
2023-03-20 2023-03-16
SQL>