首页 > 解决方案 > sql查询中自动添加月份的日期参数声明

问题描述

我在 Oracle 的 SQL Developer 工作。我有一个更长的查询,在某些条件下我有多个日期,但每个日期都基于 start_date,它们之间的唯一区别是月和日。我只想声明一个日期,例如 start_date='2021-06-01' ,然后在查询中我有类似 COLUMN_DATE BETWEEN DATE '2021-08-01' AND DATE '2021-08-31' 的条件只添加月份(在该示例在查询中添加 2 个月并获得整个 8 月的结果/例如 2021-08-01=start_date+(2months))。是否可以在不单独输入每个值的情况下获得这样的结果?下面是我的示例代码。

Def start_date='2021-06-01' 

Select
1column,
2column,
(case when exist(select 1
                from table2
                where between date '2021-08-01' and date '2021-08-31')
                then 1 else 0 end) as 3column
from table1;

标签: sqloracle

解决方案


使用ADD_MONTHS并传入您的替换变量:

Select column1,
       column2,
       case
       when exist(select 1
                  from table2 t2
                  where t2.date_column >= ADD_MONTHS(TO_DATE(&start_date, 'YYYY-MM-DD'), 2)
                  and   t2.date_column <  ADD_MONTHS(TO_DATE(&start_date, 'YYYY-MM-DD'), 3)
                 )
       then 1
       else 0
       end as column3
from   table1;

注意:在 Oracle 中,aDATE总是有一个时间组件(您使用的用户界面可能选择不显示时间组件,但它仍然会存在)所以如果您想要一个月的数据并与之比较,DATE '2021-08-31'那么您将错过 和 之间2021-08-31 00:00:01的任何值2021-08-31 23:59:59


推荐阅读