2013-11-26 2 views
1

У меня есть указатель, который имеет несколько условий, чтобы получить набор данных. Я недавно добавил состояние даты в нем для извлечения данных между конкретными датами, которые пользователь вводит, как показано ниже:using if-else/decode in where where

cursor c1 
    is 
    select t.* 
     from (select v.*, dense_rank() over (order by created desc) 
                    as rank 
       from test.table_v2 v 
       where some condition 
       and some condition 
        and some condition 
        and some condition 
        and some condition 
        and some condition 
       and ((ended) between to_date(sd,'mm/dd/rrrr') 
            and to_date(sd,'mm/dd/rrrr')+3 
        or ended like decode(sd,null,'%')) --new condition 
       and some condition 
       ) t 
     where rank < rmax+1 
    order by ended desc; 

Здесь Rmax = 1000

Мне нужно добавить условие в выражении WHERE, так что, когда sd (введенная пользователем дата) имеет значение null, строки ограничиваются 1000, а при отсутствии значения null ограничение строки не должно рассматриваться.

Я не уверен, что декодирование может использоваться в предложении where. Есть какой-либо способ сделать это?

ответ

1

Просто добавьте or sd is [not] null

select t.* 
    from (select v.*, dense_rank() over (order by created desc) 
                   as rank 
      from test.table_v2 v 
      where some condition 
      and some condition 
       and some condition 
       and some condition 
       and some condition 
       and some condition 
      and (ended between to_date(sd,'mm/dd/rrrr') 
          and to_date(sd,'mm/dd/rrrr')+3 
       or sd is null) --new condition 
      and some condition 
      ) t 
    where rank < rmax+1 or sd is not null 
+0

не могу поверить, что я сделал это настолько сложным в моей голове. Спасибо @ Джеффри Кемп – amsko