Определить, если дата Oracle на выходных? - PullRequest
15 голосов
/ 10 августа 2010

Является ли это наилучшим способом определения даты Oracle в выходные дни?

select * from mytable
where 
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN');

Ответы [ 5 ]

27 голосов
/ 10 августа 2010

Начиная с Oracle 11g, да. Единственная жизнеспособная альтернатива региона, которую я видел, выглядит следующим образом:

SELECT *
FROM mytable
WHERE MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7);
7 голосов
/ 10 августа 2010

Не ответ на вопрос .Но еще немного информации.Есть много других трюков 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 функция.

3 голосов
/ 19 декабря 2012
MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7)

НЕ правильно! Количество выходных дней может быть 6 и 7, или 7 и 1, в зависимости от настроек NLS.

Итак, PROPER-тест (независимо от настроек NLS) уже упоминался ранее:

TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN')
2 голосов
/ 28 марта 2014

На мой взгляд лучший вариант это

TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN')

1 голос
/ 06 сентября 2012

установить NLS_TERRITORY перед

alter session set NLS_TERRITORY=SWEDEN;

Итак, вы уверены, какие номера выходных

...