Если вы предпочитаете придерживаться имен дней, а не вычисленного смещения, вы можете использовать необязательный третий аргумент для функции to_char()
, чтобы избежать сессий NLS @MTO указал:
to_char(sysdate, 'FMDAY', 'NLS_DATE_LANGUAGE=ENGLISH'
даст вам полное название дня на английском языке. (Обратите внимание, что вы не можете использовать это, чтобы получить специфичную для запроса интерпретацию элемента D
; также FM
удаляет обычные правые отступы, чтобы сделать все имена одинаковой длины; здесь это не имеет значения. ..)
Как демонстрация с вашими данными в CTE и именами столбцов, которые будут действительными:
with your_table (user_id, sunday, monday, tuesday, wednesday, thursday, friday, saturday)
as (
select 123456, null, 18, null, 15, null, null, 11 from dual
union all select 789023, 18, null, 3, 15, null, null, 11 from dual
)
select user_id
from your_table
where case to_char(sysdate, 'FMDAY', 'NLS_DATE_LANGUAGE=ENGLISH')
when 'SUNDAY' then sunday
when 'MONDAY' then monday
when 'TUESDAY' then tuesday
when 'WEDNESDAY' then wednesday
when 'THURSDAY' then thursday
when 'FRIDAY' then friday
when 'SATURDAY' then saturday
end is not null;
USER_ID
----------
123456
789023
, который находит обоих пользователей, поскольку сегодня среда.