Это лучший способ определить, есть ли дата Oracle в выходные?Определите, есть ли дата Oracle в выходные?
select * from mytable
where
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN');
Это лучший способ определить, есть ли дата Oracle в выходные?Определите, есть ли дата 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);
Почему на самом деле работает юлианский день? –
@ Michael-O - потому что юлианские даты - это в основном количество дней с момента фиксированного, известного момента, когда вы можете использовать основные математические данные, чтобы определить, был ли это выходной или нет, потому что вы уже знаете, какой день недели 1 был. Поскольку другие календари имеют разную длину месяца, длину года, високосные и високосные годы, сложнее получить информацию о дне недели для других календарей, учитывая единую дату для работы. – ninesided
Не ответ на вопрос. Но еще немного информации. Есть еще много трюков 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
функция.
Ни один из них не решает проблему, первый опасен, поскольку «день недели» зависит от региона, например: 1 = воскресенье в США, понедельник в Великобритании. – ninesided
Истинный и принятый. И я не претендую на то, чтобы ответить на вопрос, просто добавил дополнительную информацию. Ваш ответ разрешил проблему. – Guru
набор NLS_TERRITORY перед тем
alter session set NLS_TERRITORY=SWEDEN;
Таким образом, вы уверены, какие номера в выходные дни
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')
Я думаю, что здесь вы можете быть неверными, формат 'J' представляет собой юлианскую дату, количество дней с момента фиксированной точки и полностью не зависит от настроек NLS. См. Эту статью для справки: http://en.wikipedia.org/wiki/Julian_day#Finding_day_of_week_given_Julian_day_number – ninesided
На мой взгляд, лучший вариант
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN')
Если вы согласны с кем-то другим, вы должны их перенести, а не добавлять повторяющийся код. –
На самом деле конец недели не суббота/Воскресенье во всех странах, несколько (20-30) стран имеют выходные в разные дни (источник: en.wikipedia.org/wiki/Workweek_and_weekend) –