Это лучший способ определить, приходится ли свидание Oracle на выходные?
select * from mytable
where
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN');
Это лучший способ определить, приходится ли свидание Oracle на выходные?
select * from mytable
where
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN');
Что касается Oracle 11g, да. Единственная жизнеспособная независимая от региона альтернатива, которую я видел, следующая:
SELECT *
FROM mytable
WHERE MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7);
to_char(my_date, 'd')
не помогает? зачем использовать 'J'
и MOD
?
- person towi; 23.05.2019
Не ответ на вопрос. Но еще немного информации. Есть еще много трюков SQL с датой.
to_char(sysdate, 'd') --- day of a week, 1,2,3 .. to 7
to_char(sysdate, 'dd') --- day of a month, 1,2,3 .. to 30 or 31
to_char(sysdate, 'ddd') --- day of a year, 1,2,3 .. to 365 or 366
to_char(sysdate, 'w') --- week of a month, 1,2,3,4 or 5
to_char(sysdate, 'ww') --- week of a year, 1,2,3 .. to 52
Подробнее здесь: функция to_char
.
MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7)
не является правильным! Количество выходных дней может быть 6 и 7 или 7 и 1, в зависимости от настроек NLS.
Итак, ПРОПОРТНЫЙ тест (независимо от настроек NLS) - это уже упомянутый ранее:
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN')
J
представляет дату по юлианскому календарю, количество дней, прошедших с фиксированного момента времени, и полностью не зависит от настроек NLS. См. Эту статью для справки: en.wikipedia.org/wiki/
- person ninesided; 09.10.2013
На мой взгляд лучший вариант - это
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN')
установить NLS_TERRITORY перед
alter session set NLS_TERRITORY=SWEDEN;
Итак, вы уверены, какие числа выходные