Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Первый раз, в первый класс ))) -HELP!!! / 5 сообщений из 5, страница 1 из 1
19.03.2003, 14:23
    #32122946
Тимур
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первый раз, в первый класс ))) -HELP!!!
Господа, не судите строго - это мой первый запрос на Oracle
Постановка - есть таблица
аmounts (....data_begin, data_end .....)
Мне необходимо получить результирующий набор, отсекая записи по условию
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select d_begin,
       d_end,
       GREATEST(d_begin,TO_DATE('01.10.2002','DD.MM.YYYY')) d1_begin ,
       LEAST(d_end,TO_DATE('31.10.2002','DD.MM.YYYY')) d1_end       
       from amount
       where (d_begin >= to_date('01.10.2002','DD.MM.YYYY')  and d_end <= to_date('31.10.2002','DD.MM.YYYY')) 
              or
             (d_begin < to_date('01.10.2002','DD.MM.YYYY')  and d_end >= to_date('01.10.2002','DD.MM.YYYY')) 
              or
             (d_begin >= to_date('01.10.2002','DD.MM.YYYY')  and d_end >  to_date('31.10.2002','DD.MM.YYYY')) 
              or
             (d_begin <= to_date('01.10.2002','DD.MM.YYYY')  and d_end >  to_date('31.10.2002','DD.MM.YYYY')) 


Проблема в том, что если даты выходят за границу надо подставлять граничные значения. В MS SQL я это решал CASE WHEN и т.д. а как это сделать в Oracle
...
Рейтинг: 0 / 0
19.03.2003, 14:27
    #32122951
Александр Б
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первый раз, в первый класс ))) -HELP!!!
Тоже с помощью CASE WHEN ... THEN ... ELSE ... END
...
Рейтинг: 0 / 0
19.03.2003, 14:30
    #32122953
V.Pupkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первый раз, в первый класс ))) -HELP!!!
или DECODE, если до Oracle 8.1.7
...
Рейтинг: 0 / 0
19.03.2003, 14:44
    #32122971
MaxU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первый раз, в первый класс ))) -HELP!!!
во первых я бы попробовал облегчить работу оптимизатору:
Код: plaintext
1.
2.
3.
4.
5.
select d_begin,
       d_end,
       GREATEST(d_begin,TO_DATE('01.10.2002','DD.MM.YYYY')) d1_begin ,
       LEAST(d_end,TO_DATE('31.10.2002','DD.MM.YYYY')) d1_end       
from amount
where (d_begin <= to_date('31.10.2002','DD.MM.YYYY') and d_end >= to_date('01.10.2002','DD.MM.YYYY'))


;)

а во вторых мне кажется что этот запрос должен работать правильно, то есть поясны пжалста. что он выдает и почему это тебя не устраивает...
...
Рейтинг: 0 / 0
19.03.2003, 15:04
    #32122996
Тимур
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первый раз, в первый класс ))) -HELP!!!
Спасибо всем!!!
2MaxU C перепугу не до оптимизации было )))) Вы правы, все работает и так - окосел от "важности момента" ))). .... Ваш вариант приял за правильный )
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Первый раз, в первый класс ))) -HELP!!! / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]