powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Первый раз, в первый класс ))) -HELP!!!
5 сообщений из 5, страница 1 из 1
Первый раз, в первый класс ))) -HELP!!!
    #32122946
Фотография Тимур
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, не судите строго - это мой первый запрос на 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
Первый раз, в первый класс ))) -HELP!!!
    #32122951
Александр Б
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже с помощью CASE WHEN ... THEN ... ELSE ... END
...
Рейтинг: 0 / 0
Первый раз, в первый класс ))) -HELP!!!
    #32122953
V.Pupkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
или DECODE, если до Oracle 8.1.7
...
Рейтинг: 0 / 0
Первый раз, в первый класс ))) -HELP!!!
    #32122971
Фотография MaxU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во первых я бы попробовал облегчить работу оптимизатору:
Код: 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
Первый раз, в первый класс ))) -HELP!!!
    #32122996
Фотография Тимур
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем!!!
2MaxU C перепугу не до оптимизации было )))) Вы правы, все работает и так - окосел от "важности момента" ))). .... Ваш вариант приял за правильный )
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Первый раз, в первый класс ))) -HELP!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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