Create a dynamic date range based on specific day - Oracle SQL Developer

问题描述 投票:0回答:1

我想返回上个月 16 号到今天之间的值,但需要上个月 16 号是动态的,这样我就不必每次都更改月份

这就是现在的代码:

哪里 “2023-01-16”和“2023-02-15”之间的日期

我需要它更像这样:

哪里 'YYYY-MM-16' 和现在之间的日期()

date dynamic oracle-sqldeveloper truncate
1个回答
0
投票

这是获得上个月第 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>
© www.soinside.com 2019 - 2024. All rights reserved.