2013-03-15 6 views
1

первый ... извините за мой английский.Oracle - Еще один способ для месячного запроса?

У меня есть запрос, как это:

Select * 
From tableA 
Where (
      TO_NUMBER(TO_CHAR(dateA(+),'SYYYY')) = 2013 
      AND TO_NUMBER(TO_CHAR(dateA(+),'MM')) = 02 
      AND to_number(to_char(dateA(+),'dd')) <= 25 
     ) 

и извлекать мне данные из каждой даты до последнего номера, которые я даю в качестве параметра, в данном случае на следующий день 25. Эти рабочим, но задержки очень много, потому что форма заявления «Где» ... кто-нибудь знает другой способ, который быстро извлекает данные и обладает той же функциональностью?

+0

Почему не простая 'где дата между и '? – Mat

+0

Поскольку клиенту требуется только одна дата, u.u – K1988

+0

Это может быть серая область, но я думаю, что рабочий код, который требует настройки, лучше подходит для сайта Code Review. – bernie

ответ

2

Это звучит, как вы хотите

SELECT * 
    FROM tableA 
WHERE dateA BETWEEN trunc(date '2013-02-26', 'MM') AND date '2013-02-26' 

Это возвращает все строки, где dateA находится между первым месяцем и указанной датой. Если есть индекс на dateA, Oracle сможет использовать его для такого рода запросов (хотя на самом деле это будет отдельная проблема).

+1

Это также возвращает дополнительный день, если данные хранятся без компонента времени. –

+0

Да, это я хочу! Большое вам спасибо, Justin Cave n__n – K1988

Смежные вопросы