IF (To_Char(Date1,'Day') = 'Sunday' Or To_Char(Date2,'Day') = 'Sunday') Then
SELECT columns ... FROM Table_Name;
ELSE
SELECT columns ... FROM Table_Name;
Это не работает!Как удалить выходные дни в PL/SQL?
IF (To_Char(Date1,'Day') = 'Sunday' Or To_Char(Date2,'Day') = 'Sunday') Then
SELECT columns ... FROM Table_Name;
ELSE
SELECT columns ... FROM Table_Name;
Это не работает!Как удалить выходные дни в PL/SQL?
Это не работает, потому что вы не используете format model modifier, fm
, в вашей модели. Поскольку вы не используете модификатор модели формата, дни недели правильно заполняются пробелами до 9 символов (длина самой длинной среды). Это, в свою очередь, означает, что ваш тест на равенство неверен.
Для того, чтобы исправить это с помощью модели формата модификатор:
to_char(date1, 'fmDay')
Вы можете запустить этот запрос для демонстрации как проблемы и решения:
with a_week as (
select sysdate - level as dy
from dual
connect by level <= 7)
select dy
, to_char(dy, 'Day')
, length(to_char(dy, 'Day'))
, to_char(dy, 'fmDay')
, length(to_char(dy, 'fmDay'))
from a_week
Сказав, что я не буду беспокоиться. Зачем вам нужно печатать весь день? Используйте модель формата DY
вместо:
if to_char(date1,'DY') = 'SUN' or to_char(date2,'DY') = 'SUN' then
...
Это всегда длинные три символа.
Однократное примечание при отладке. Если вы знаете, что первый оператор IF не выполняется должным образом, я бы выполнил следующие этапы: