Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 выборка за месяц  [new]
ЯпСтам
Guest
На входе есть число от 1 до 12.
В таблице есть поле типа DATE в виде 'dd-mm-yyyy'
Требуется выбрать из таблицы все записи, у которых месяц был равен числу на входе.

Как тут попроще запрос написать? Может функцию какую-нить кто подскажет?
25 мар 08, 12:28    [5455046]     Ответить | Цитировать Сообщить модератору
 Re: выборка за месяц  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116226
Думать отсюда :-)

SQL> select extract( month from sysdate) from dual
  2  /
 
EXTRACT(MONTHFROMSYSDATE)
-------------------------
                        3
 
SQL> 
25 мар 08, 12:31    [5455071]     Ответить | Цитировать Сообщить модератору
 Re: выборка за месяц  [new]
ГостЪ
Guest
dmidek
Думать отсюда :-)

нее, отсюда!
25 мар 08, 12:33    [5455087]     Ответить | Цитировать Сообщить модератору
 Re: выборка за месяц  [new]
Двоюшник
Member

Откуда: Киев
Сообщений: 1135
А это будет правильно если будут, например, попадать даты за март этого года и март предыдущего года и т.д.?

---
Ну ты заходи ежели чё...
25 мар 08, 12:37    [5455120]     Ответить | Цитировать Сообщить модератору
 Re: выборка за месяц  [new]
ЯпСтам
Guest
спасибо за быстрые ответы, то что нужно))
Двоюшник
А это будет правильно если будут, например, попадать даты за март этого года и март предыдущего года и т.д.?

собсно, поможет extract (year from...)
25 мар 08, 12:43    [5455173]     Ответить | Цитировать Сообщить модератору
 Re: выборка за месяц  [new]
Двоюшник
Member

Откуда: Киев
Сообщений: 1135
ЯпСтам
спасибо за быстрые ответы, то что нужно))
Двоюшник
А это будет правильно если будут, например, попадать даты за март этого года и март предыдущего года и т.д.?

собсно, поможет extract (year from...)

помочь поможет но и навредить может...
например не подключится индекс по дате, если он есть...
25 мар 08, 13:00    [5455315]     Ответить | Цитировать Сообщить модератору
 Re: выборка за месяц  [new]
OraDen
Member

Откуда:
Сообщений: 828
Двоюшник
А это будет правильно если будут, например, попадать даты за март этого года и март предыдущего года и т.д.?
+1

если нужно за конкретный месяц этого года, то имхо лучше преобразовать число в период (дату начала периода и дату его окончания) и в запросе between


ЯпСтам
В таблице есть поле типа DATE в виде 'dd-mm-yyyy'
неа, нету
25 мар 08, 13:21    [5455497]     Ответить | Цитировать Сообщить модератору
 Re: выборка за месяц  [new]
Двоюшник
Member

Откуда: Киев
Сообщений: 1135
OraDen
Двоюшник
А это будет правильно если будут, например, попадать даты за март этого года и март предыдущего года и т.д.?
+1

если нужно за конкретный месяц этого года, то имхо лучше преобразовать число в период (дату начала периода и дату его окончания) и в запросе between


ЯпСтам
В таблице есть поле типа DATE в виде 'dd-mm-yyyy'
неа, нету


и я об этом же :)
можно примерно так (работает даже если поле со временем):
dt > = add_months(trunc(sysdate,'YYYY'),:m-1) and dt < add_months(trunc(sysdate,'YYYY'),:m)
25 мар 08, 13:30    [5455569]     Ответить | Цитировать Сообщить модератору
 Re: выборка за месяц  [new]
OraDen
Member

Откуда:
Сообщений: 828
Двоюшник
можно примерно так (работает даже если поле со временем):
dt > = add_months(trunc(sysdate,'YYYY'),:m-1) and dt < add_months(trunc(sysdate,'YYYY'),:m)
Можно, но если селект в процедуре, функции, etc то имхо лучше все преобразования числа к дате делать не в запросе а в pl/sql коде, а для получения верхней границы периода можно вычесть одну секунду из первого дня следующего месяца

date_from := add_months(trunc(sysdate,'YYYY'),:m-1);
date_to := add_months(trunc(sysdate,'YYYY'),:m)-1/86400;

SELECT ... WHERE dt between date_from and date_to ...;
25 мар 08, 14:35    [5456066]     Ответить | Цитировать Сообщить модератору
 Re: выборка за месяц  [new]
BigNik
Member

Откуда: Красноярск\Москва
Сообщений: 226
Если правильно понимаю условия задачи, то проще сделать так.

 select *
 from table t
 where  to_char(t.datet,'MM')=:mm

единственный недостатаков если много данных будет тормозить так как индексы не используются и будет исплозован полный просмотр таблицы.
25 мар 08, 17:28    [5457517]     Ответить | Цитировать Сообщить модератору
 Re: выборка за месяц  [new]
Двоюшник
Member

Откуда: Киев
Сообщений: 1135
BigNik
Если правильно понимаю условия задачи, то проще сделать так.

 select *
 from table t
 where  to_char(t.datet,'MM')=:mm

единственный недостатаков если много данных будет тормозить так как индексы не используются и будет исплозован полный просмотр таблицы.

это видели?
25 мар 08, 17:30    [5457540]     Ответить | Цитировать Сообщить модератору
 Re: выборка за месяц  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
BigNik
Если правильно понимаю условия задачи, то проще сделать так.
..
единственный недостатаков ..

ну вас.. вот ща научите автора плохому..
25 мар 08, 17:40    [5457640]     Ответить | Цитировать Сообщить модератору
 Re: выборка за месяц  [new]
OraDen
Member

Откуда:
Сообщений: 828
orawish
BigNik
Если правильно понимаю условия задачи, то проще сделать так.
..
единственный недостатаков ..

ну вас.. вот ща научите автора плохому..
ага функциональным индексам там всяким, хотя нет BigNik про них наверное не знает
25 мар 08, 17:44    [5457683]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить