Czy to najlepszy sposób ustalenia, czy data Oracle jest w weekend?Ustal, czy data Oracle jest weekendem?
select * from mytable
where
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN');
Czy to najlepszy sposób ustalenia, czy data Oracle jest w weekend?Ustal, czy data Oracle jest weekendem?
select * from mytable
where
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN');
Od Oracle 11g, tak. Jedynym regionem realną alternatywą agnostyk, że widziałem to w następujący sposób:
SELECT *
FROM mytable
WHERE MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7);
Dlaczego dzień juliański rzeczywiście działa? –
@ Michael-O - ponieważ daty Juliana są w zasadzie liczbą dni od ustalonego, znanego punktu w czasie, możesz użyć podstawowych matematyki, aby określić, czy był to weekend, czy nie, ponieważ już wiesz, który dzień dnia tygodnia 1 był. Ponieważ inne kalendarze mają różną długość miesiąca, długość roku, dni przestępne i lata przestępne, trudniej jest uzyskać informacje o dniu tygodnia dla innych kalendarzy, biorąc pod uwagę jedną datę pracy. – ninesided
Nie jest to odpowiedź na pytanie. Ale trochę więcej informacji. Istnieje więcej sztuczek SQL z datą.
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
Więcej tutaj: to_char
Funkcja.
żaden z nich nie rozwiązuje problemu, pierwszy jest niebezpieczny, ponieważ "dzień tygodnia" zależy od regionu, na przykład: 1 = niedziela w USA, poniedziałek w Wielkiej Brytanii. – ninesided
Prawda i akceptacja. I chciałem odpowiedzieć na pytanie, po prostu dodałem więcej informacji. Twoja odpowiedź rozwiązała problem. – Guru
zestaw NLS_TERRITORY przed
alter session set NLS_TERRITORY=SWEDEN;
Więc jesteś pewien, których numery są weekendy
MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7)
nie jest poprawne! Liczba dni weekendowych może wynosić 6 & 7 lub 7 i 1, w zależności od ustawień NLS.
Więc właściwego testu (niezależnie od NLS ustawień) jest to jeden wspomniano wcześniej:
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN')
Myślę, że możesz być tu niepoprawny, format 'J' reprezentuje datę juliańską, liczbę dni od ustalonego punktu w czasie i jest całkowicie niezależny od ustawień NLS. Zobacz ten artykuł w celach informacyjnych: http://en.wikipedia.org/wiki/Julian_day#Finding_day_of_week_given_Julian_day_number – ninesided
Moim zdaniem najlepszym rozwiązaniem jest
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN')
Jeśli zgadzasz się z kimś innym, powinieneś go upomnieć, a nie dodawać powielonego kodu. –
Właściwie koniec tygodnia nie jest sobota/Niedziela we wszystkich krajach, kilka (20-30) krajów ma koniec tygodnia w różne dni (źródło: en.wikipedia.org/wiki/Workweek_and_weekend) –