2016-03-05 2 views
1

У меня возникла проблема с извлечением некоторых транзакций из моего стола, идея заключается в том, что я хочу удалить всю транзакцию, которую пользователи сделали с 2 дней, но я хочу исключить выходные дни из подсчета (выходные здесь пятница и субботу), до сих пор я могу получить 2 дня старые записи, но не в выходные дни не исключаютВыберите строки 2 дня, кроме выходных

SELECT c1 
FROM my_table 
WHERE TRANS_DATE <= (TRUNC (SYSDATE) - 3).. 

Пример: пользователь сделал свой запрос во вторник я должен удалить запрос в четверг ,, но если он сделал это на Четверг, я должен удалить его в понедельник.

любые идеи? спасибо всем

ответ

0

Try определения дня недели с выражением дела и вычитания соответственно, например:

SELECT c1 
FROM my_table 
WHERE 
TRANS_DATE <= (
CASE WHEN TO_CHAR(SYSDATE, 'fmDay', 'NLS_DATE_LANGUAGE = American') = 'Monday' then TRUNC (SYSDATE) - 5 
    ELSE TRUNC (SYSDATE) - 3 END 
); 
+0

Обратите внимание, что для некоторых территорий неделя начинается также в субботу = 1 или даже в четверг (как далеко я помню). Лучше использовать 'TO_CHAR (SYSDATE, 'fmDay', 'NLS_DATE_LANGUAGE = American') = 'Monday'', потому что' Day' также зависит от текущего сеанса 'NLS_DATE_LANGUAGE'. –

+0

Спасибо за ваш ответ, но как я могу изменить свою текущую сессию, извините, я не администратор базы данных. Вы можете помочь мне с этим? я использую oracle 12c как DB и 11g в качестве разработчика –

+0

, что является очень хорошим предложением от @WernfriedDomscheit; используя TO_CHAR (SYSDATE, 'fmDay', 'NLS_DATE_LANGUAGE = American') = 'Monday', вам не нужно беспокоиться о том, какой именно NLS_DATE_LANGUAGE вы находитесь. Я обновил SQL. – Jayvee

1
SELECT c1 
FROM my_table 
WHERE TRANS_DATE >= sysdate - decode(to_number(to_char(sysdate -1,'D')), 1,4, 6,3, 7,4, 2) 

Первый день воскресенье Если предыдущий день воскресенье или субботу, то мы имеем два выходных дня Если вчера был пятница, у нас был один выходной день плюс два дня

+0

Добро пожаловать в Stack Overflow и спасибо за прыжки чтобы ответить на вопрос. Два предложения: пожалуйста, отформатируйте исходный код, вставив в него четыре пробела, и, пожалуйста, дайте несколько слов, объясняющих, почему ваш ответ работает. Я исправлю форматирование; вы должны отредактировать свой пост, чтобы предложить объяснение. –

+0

Знайте, что результат 'to_char (sysdate -1, 'D')' зависит от текущих настроек сеанса 'NLS_TERRITORY'. –

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