2014-12-09 5 views
-2

У меня есть следующая таблица tbl в базе данных, и у меня есть динамическая дата присоединения 1-1-2012, и я хочу, чтобы эта дата была между (Осень и весна) или (весна и лето) или (лето и осень) . Мне нужен запрос, в котором я передал только дату присоединения, которые возвращают семестр и дату присоединения в Oracle.получить диапазон дат между датами

Semestertime  joiningDate 
Fall   10-13-2011 
Spring   2-1-2012 
Summer   6-11-2012 
Fall   10-1-2015 
+0

Учитывая '1-1-2012', это вернет' осень 2011'? А что, если дано «1-1-2015»? –

+0

Я хочу запрос, как я могу найти дату, что когда-либо даю диапазон –

+0

У меня есть динамическая дата присоединения –

ответ

0

Если я правильно понимаю ваш вопрос:

SELECT * 
FROM your_table 
WHERE joiningDate between to_date (your_lower_limit_date_here, 'mm-dd-yyyy') 
AND to_date (your_upper_limit_date_here, 'mm-dd-yyyy`); 
+0

У меня есть таблица и только одна дата присоединения, как я могу написать запрос. Как я могу найти, что такое нижний предел и что такое верхний лимити? –

0

А что-то вроде этого:

select 'BEFORE' term, 
     t."Semestertime", to_char(t."joiningDate", 'MM-DD-YYYY') 
from (
    select tbl.*, rownum rn from tbl where tbl."joiningDate" < to_date('1-1-2012','MM-DD-YYYY') 
    --               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    --               your reference date 
    order by tbl."joiningDate" desc) t 
where rn = 1 

union all 

select 'AFTER' term, 
     t."Semestertime", to_char(t."joiningDate", 'MM-DD-YYYY') 
from (
    select tbl.*, rownum rn from tbl where tbl."joiningDate" > to_date('1-1-2012','MM-DD-YYYY') 
    --               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    --               your reference date 

    order by tbl."joiningDate" asc) t 
where rn = 1 

Это вернет "термин" до и после указанной даты. Вероятно, вам придется адаптировать такой запрос к вашим конкретным потребностям. Но это может быть хорошей отправной точкой.

Например, с учетом ваших деловых правил вы можете использовать <= вместо <. Вам может потребоваться отобразить в качестве результата столбец вместо строк. Все это не должно меняться.


В качестве альтернативного решения с использованием КТОС и подзапросов:

with testdata as (select to_date('1-1-2012','MM-DD-YYYY') refdate from dual) 

select v.what, tbl.* from tbl join 
(
    select 'BEFORE' what, max(t1."joiningDate") d 
    from tbl t1 
    where t1."joiningDate" < to_date('1-1-2012','MM-DD-YYYY') 

    union all 

    select 'AFTER' what, min(t1."joiningDate") d 
    from tbl t1 
    where t1."joiningDate" > to_date('1-1-2012','MM-DD-YYYY') 
) v 
on tbl."joiningDate" = v.d 

http://sqlfiddle.com/#!4/c7fa5/15 Смотрите для живой демонстрации, сравнивая эти решения.

+0

спасибо за руководство –