2013-08-15 4 views
0

Мне нужно выбрать recods из таблицы oracle для текущей недели календаря на основе поля типа даты. В настоящее время я делаю так:выбор записей за неделю из таблицы Oracle

select * from my_table where enter_date > sysdate -7 

Если сегодня четверг, этот запрос будет выбирать записи семь дней с сегодняшнего дня, которая просачивается в последнюю неделю в четверг. Есть ли способ динамически выбирать записи для текущей календарной недели?

+1

Если я получаю вас, то это, как с понедельника по четверг, как сегодня четверг? – Romesh

+0

Возможный дубликат [здесь] (http://stackoverflow.com/questions/16289302/in-oracle-sql-how-would-you-obtain-the-timestamp-representing-the-start-the/16289402#16289402) – Noel

+0

Да Roms То есть мне нужно выбрать Только записи для текущей недели Календаря. – ErrorNotFoundException

ответ

1

to_char(sysdate, 'd') возвращает день недели в диапазоне [1..7]; поэтому попробуйте использовать

select * 
    from my_table 
where enter_date >= trunc(sysdate) - to_char(sysdate, 'd') + 1 
+0

Извините, что я полный новичок на sql, это то же самое, что 'select * from church_income_expense, где TRAN_DATE> = trunc (sysdate, 'ww')'? – ErrorNotFoundException

+1

№ См. Http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions230.htm#i1002084 «WW - тот же день недели, что и в первый день года »; поэтому trunc (sysdate, 'ww') вернется в следующий вторник с 1 января 2013 года во вторник ... –

+0

Ok Спасибо, сэр, я прикину. – ErrorNotFoundException

2

Если неделя начинается в понедельник, то:

select ... 
from ... 
where dates >= trunc(sysdate,'IW') 

Для альтернативных определений в первый день недели, TRUNC (SYSDATE, «W») обрезает до дня неделя, с которой начался текущий месяц, и trunc (sysdate, 'WW') обрезается до дня недели, с которой начался текущий год.

Смотреть другие доступные усечения здесь: http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions255.htm#i1002084