我有一个包含三个提示的查询;部门、起始日期和截止日期。必须选择部门 ID,但可以选择日期范围。如何使日期范围可选?我正在考虑使用解码功能,但不知道如何编写它,所以两个日期提示可以留空。
问问题
182 次
2 回答
0
假设未指定的日期输入为 NULL,您可以执行以下小技巧:
with
TheTable as
(select 1 dept, sysdate dt from dual
union
select 2 dept, sysdate-63 dt from dual
union
select 3 dept, sysdate-95 dt from dual
)
select *
from thetable
where coalesce(:DateFrom,dt) <= dt
and coalesce(:DateTo,dt) >= dt
;
需要更多关于数据性质的信息以将部门视为输入...该表是否每个部门存储多个日期?
于 2013-08-01T20:55:57.163 回答
0
如果您使用的是存储过程,则可以在 select 语句中执行以下操作:
select *
from table
where (field > inDateStart and field < inDateEnd) or
(inDateStart is null and inDateEnd is null)
或使用合并
select *
from table
where (field => coalesce(inDateStart,field) and
field <= coalesce(inDateEnd,field)
这真的取决于你的具体情况。有些查询适用于第一个,有些适用于第二个。
于 2013-08-01T20:55:02.597 回答