sql - 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;
解决方案
使用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
。
推荐阅读
- javascript - 避免struts2应用程序中的xss攻击
- elixir - 如何在同一页面上使用多个变更集
- javascript - Javascript:从下拉列表中获取所选值并根据开始时间和间隔计算结束时间
- swift - Swift:For 循环结束条件只计算一次?
- javascript - javascript表格单元格值用户输入并计算总谷歌脚本网络应用程序
- excel - 范围查找方法将字符串显示为整数,因此显示类型不匹配错误
- angular - 如何使用 combineLatest 和 mergeMap 进行多个订阅?
- javascript - 如何将 .then 用于异步函数
- javascript - 在 ajax 调用之外获取输出
- node.js - 基于多对多连接表的createdAt排序